*int open(const char pathname, int flags, mode_t mode);
open(文件名,选项标志,权限)
pathname:文件路径名
flags:标志位
必选其一:O_RDONLY ,O_WRONLY, O_RDWR
可选项:
O_CREAT:如果文件不存在,则创建
O_EXCL:跟O_EXCL一起使用,如果文件已经存在报错返回。
O_TRUNC:打开文件时截断文件长度为0—清空内容
O_APPEND:将写入设置为追加写。
w+:O_RDWR| O_CREAT| O_TRUNC
mode:文件的权限设置,0777—如果使用了O_CREAT就一定要指定
返回值:成功返回非负整数—操作句柄----文件描述符;失败返回-1
*ssize_t write(int fd, const void buf, size_t count);
write(句柄,数据,长度)
fd:open返回的操作句柄,用于明确操作的是哪个打开的文件
buf: 要写入文件的数据
count:要写入的数据长度
返回值:成功返回实际写入文件的数据长度 失败返回-1;
*ssize_t read(int fd, void buf, size_t count);
fd:open返回的操作句柄,用于明确操作的是那个大开的文件
buf: 存放读取到的数据的缓冲区
count:要读取的数据长度
返回值:成功返回实际读取到文件的数据长度 失败返回-1;
off_t lseek(int fd, off_t offset, int whence);
lseek(句柄, 偏移量, 相对位置)
fd:open返回的操作句柄
offset:偏移量; whence:
相对起始偏移位置-SEEK-SET/SEEK_CUR/SEEK_END
返回值:跳转后的位置相对于文件起始位置的偏移量 失败返回-1
int close(int fd);
1 #include<stdio.h> //printf
2 #include<unistd.h> //fork
3 #include<stdlib.h> //exit
4 #include <fcntl.h> //open
5 #include <sys/stat.h> //open
6 #include<string.h> //strlen
7
8 int main(int argc,char* argv[]) //运行参数个数 运行参数字符首地址
9 {
10 //当前权限设置为0
11 umask(0);
12 //打开文件
13 //open(文件名,打开方式,操作权限)
14 int fd=open("test.txt",O_RDWR|O_CREAT|O_APPEND,0777);
15 if(fd<0){
16 perror("open error");
17 return -1;
18 }
19
20 char *ptr="今天你开心吗?\n";
21 //write(句柄,数据,长度)
22 int ret=write(fd,ptr,strlen(ptr));
23 if(ret<0){
24 perror("write error");
25 exit(-1);
26 }
27
28 //lseek(操作句柄,偏移量,相对位置)
29 lseek(fd,0,SEEK_SET);
30
31 char buf[1024]={0};
32 //read(操作句柄,数据,数据大小)
33 ret=read(fd,buf,1023);
34 if(ret<0){
35 perror("read error");
36 exit(-1);
}
38 printf("读取成功!\n");
39 //关闭文件
40 close(fd);
41 return 0;
42 }