open函数:
头文件: #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
函数原型:
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 以读写的方式打开
参数mode:如果参数flags使用了O_CREAT,才使用该参数,用于指定文件权限
O_CREAT:若文件不存在则创建文件,使用此选项时,必须指定mode参数
O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则返回-1报错
O_APPEND:每次添加数据给文件,都会加到文件的尾端,不会覆盖数据
O_TRUNC:如果文件内有内容,而且为只读或者只写打开,则原本数据会被清除
write函数:
头文件: #include <unistd.h>
函数原型:
ssize_t write(int fd, const void *buf, size_t count);
参数fd:文件操作符,open得到的,用于指定某个文件
参数buf: 写入的数据的首地址
参数count: 要写的数据的实际的大小(字节)
函数返回值:成功 返回实际写入的字节数
失败 返回-1 ,错误代码存入errno中
进行完写操作后,光标会停在刚写入的内容末端。
前面write读入数据后,如果要使用read读取数据和数据长度大小,需要用lseek函数将光标重新调整到开头位置进行测量。
read函数:
头文件: #include <unistd.h>
函数原型:
ssize_t read(int fd, void *buf, size_t count);
参数fd:文件操作符,open得到的,用于指定某个文件
参数buf: 读取到的数据保存在缓冲区buf中
参数count:读取多少个字节到buf
read的返回值:
成功时,返回读取的字节数(零表示结束)
出现错误时,返回-1
使用open、write、read函数实现cp命令:
补充:
标准io : 0 stdin 1 stdout 2 stderror
0 : 标准输入设备
1 : 标准输出设备
2 : 标注错误输出描述符号
0、1、2可以理解为文件标识符
补充:%m
printf %m 分析_Function_18的博客-CSDN博客
lseek函数:
头文件:
#include <sys/types.h>
#include <unistd.h>
函数原型:
off_t lseek(int fd,off_t offset,int whence);
参数1:文件描述符
参数2:文件指针偏移量
参数3:文件偏移的相对位置
off_t底层就是long int类型
参数offset为负数时向文件开头偏移,正数向文件末尾偏移,0则为不偏移
参数offset的含义取决于参数whence:
1.如果whence为SEEK_SET,offset相对于文件开头进行偏移
2.如果whence为SEEK_END,offset相对于文件末尾进行偏移
3.如果whence为SEEK_CUR,offset相对于文件当前位置进行偏移
返回值:
成功:返回文件偏移量
失败:-1
可以用lseek查看字符串的长度:
lseek实现文件扩展:
开始扩展:
代码里扩展10个字节,加上那个6,正好是多了11个。