Linux day3

makefile

makefile的好处:一次编写 终身受益

makefile的命名规则
makefile
Mkefile

makefile 的三要素:
目标
依赖
规则命令

写法:
目标:依赖
tab键规则命令

第一版makefile

在这里插入图片描述
如果只改其中一个文件,所有源码都重新编译
可以考虑编译过程分解,先生成.o文件,然后使用.o文件变成结果
在这里插入图片描述
在这里插入图片描述

第二版makefile

可以定义变量objFiles=main.o add.o sub.o div.o
变量的使用$(objFiles), $(变量名)
makefile的隐含规则:默认处理第一个目标
函数:
wildcard 可以进行文件匹配
patsubst 内容的替换

makefile的变量

$@代表目标
$^代表全部依赖
$< 第一个依赖
$? 第一个变化依赖

@在规则钱代表不输出该条规则的命令
规则前的“-”,代表该条规则报错,仍然继续执行

gdb调试
使用gdb:编译的时候加 -g参数
gcc sub.c main.c -o app -I ./ -g

启动gdb:gdb app(对应执行程序名)
在gdb启动程序:
r(un)启动
strat 会停留在主函数上 分部调试
n(next) 往下执行 下一条指令
step 也是往下执行  下一条指令 可以进入函数内部 但库函数不行
q(quit) 退出gdb
set args 10 6 设置启动参数 传递参数
l(list) 看代码(默认显示10行)
 l 显示主函数对应的文件
 l 文件名 行号
break 设置断电 break 加 行数 e.g. break 17
b 行号 主函数所在文件的行
b 函数名
b 文件名;行号

删除断电,d(del)编号
查看断电i(info) b,得到编号
c(continue)跳到下一个断电
p (print)打印变量的值
ptype 打印变量的类型

在run 的时候也可以指定参数
set 设置变量的值
set argc=4
set argc[1]=“12”
set aegv[2]=“7”
display 显示变量的值,用于追踪,查看变量具体什么时候变化
undisplay 删除显示变量,查看编号 info display
设置条件断点 b line if i == 1
在这里插入图片描述
在这里插入图片描述

文件IO

open
查看 man 2 open
int open(const char *pathname,int flags);
int open(const char *pathname, int flags,mode_t mode);
: pathname 文件名
flags
必选项
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
可选项
O_APPEND 追加
O_CREAT 创建文件
O_EXCL 与O_CREAT 一起使用,如果文件存在,则报错
O_NONBLOCK 非阻塞
返回值:返回最小的可用文件描述符,失败返回-1.设置errno

close关闭文件描述符
int close(int fd);
fd open打开的文件描述符
返回值:成功返回0,失败返回-1,设置errno

read
ssize_t read(int fd,void *buf,size_t count);
fd 文件描述符
buf 缓冲区
count缓冲区大小
返回值:失败返回-1,设置errno;成功返回读到的大小;0代表读到文件末尾
非阻塞的情况下 rea返回-1,但是此时需要判断errno的值

write
ssize_t read(int fd,void *buf,size_t count);
fd 文件描述符
buf 缓冲区
count 缓冲区大小
返回值:成功,返回写入的字节数;失败返回-1,设置erron;0代表未写入

实现一个cat功能,读文件,输出到标准输出

需求:打开一个文件,写入内容:helloworld,然后读取一下该文件的内容,输出到屏幕

lessk 移动文件读写位置
off_t lseek(int fd,off_t offset,int whence)
fd 文件描述
offset 偏移量
whence
SEEX_SET 文件开始位置
SEEX_CUR 当前位置
SEEX_END 结尾
返回值:
成功 返回当前位置到开始的长度
失败 返回-1,设置errno
lessk的作用
移动文件读写位置
计算文件大小
拓展文件

阻塞的概念
read函数在读设备或者读管道或者读网络的时候
输入输出设备对应/dev/tty这个文件

fcntl函数 设置非阻塞

发布了4 篇原创文章 · 获赞 0 · 访问量 82

猜你喜欢

转载自blog.csdn.net/huster0828/article/details/104182387