1、文件打开
//#include <sys/types.h>
//#include <sys/stat.h>
//#include <fcntl.h> //头文件
int fd = open("./test1.txt", O_CREAT|O_RDWR,0666);
//int fd=open("./test.txt",O_RDONLY);
//int fd=open("./test.txt",O_WRONLY);
if(fd < 0){
printf("open errno=%d %s\n",errno,strerror(errno));
perror("open err");
return -3;
}
printf("open success\n");
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname,文件路径
flags: 他是一个32bit的整数,
每一个bit表示文件的一种属性,比如 某个bit置一表示文件可写,置零表示不可写
O_RDONLY 只读
O_WRONLY 只写
O_RDWR: 读写
上述三个必须包含一个.
O_APPEND: append-追加
O_CREAT: 创建
可以指定一个权限, mode指定权限
只有flags参数中包含O_CREAT,mode才能使用
0660,表示这是一个 八进制 0x12 23 023
O_TRUNC: 如果文件存在,则清空
返回值:
成功返回一个 文件描述符, 正数
失败: -1, errno
2、文件的关闭
//#include <unistd.h>
int ret = close(fd);
if(ret <0){
perror("close err");
return -3;
}
int close(int fd);
返回值: succes-0
-1 failed ,errno
3、文件的写入
char wbuf[]="good morning.";
ret = write(fd,wbuf,strlen(wbuf));
if(ret < 0 ){
perror("write err");
return -9;
}
return 0;
ssize_t write(int fd, const void *buf, size_t count);
fd:文件描述符
buf: 存放数据的buf
counte:你要求写入的大小B
返回值:
实际写入的大小
-1:失败,errno
4、文件的读取
char rbuf[33] = {0};
ret = read(fd,rbuf,sizeof(rbuf)-1);
if(ret < 0 ){
perror("read err");
return -3;
}else if(ret ==0){
printf("end of file\n");
return 0;
}
printf("%s",rbuf);
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
fd:文件描述符
buf: 数据存放的位置
count:你要求读多少数据,B
返回值:
实际读取的大小 0-表示文件结束
-1 failed,errno
5、设置/读取 文件 偏移位置/偏移量
ret = lseek(fd,0,SEEK_CUR);
if(ret <0){
perror("lseek err");
return -4;
}
printf("lseek got current position:%d\n",ret);
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
fd:文件描述符
offset:偏移量
whence:
SEEK_SET: 从头部开始计算 offset>=0
SEEK_CUR: 从当前位置计算 offset可正可负
SEEK_END: 从尾部开始计量 offset<=0
返回值:
成功 返回的是 当前位置距离头部的偏移量 >=0
失败 -1,errno
获取文件大小:
fsize=lseek(fd,0,SEEK_END);