一、O_EXCL 判断一个文件是否已经存在
O_EXCL如果同时指定了O_CREAT,并且文件已经存在,则打开文件失败或返回值是-1.
1 2
1 #include<stdio.h>
2 #include<fcntl.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5 #include<string.h>
6
7 int main()
8 {
9 int fd;
10 // fd = open("./file1",O_RDWR);
11 // if(fd==-1){
12 // printf("open file1 failed\n");
13 fd = open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);
14 if(fd==-1){
15 printf("file1 exist\n");
16 }
17 else if(fd==3){
18 printf("open file1 sucess\n");
19 }
20 // }
21 printf("fd=%d\n",fd);
22
23 //ssize_t write(int fd, const void *buf, size_t count);
24 char *writeBuf ="hello,world";
25 int n_write = write(fd,writeBuf,strlen(writeBuf));
26 if(n_write!=-1){
27 printf("write %d byte to writeBuf\n",n_write);
28 }
29
30 //off_t lseek(int fd, off_t offset, int whence);
31 int sizeOfFile=lseek(fd,0,SEEK_END);
32 printf("sizeOfFile=%d\n",sizeOfFile);
33 lseek(fd,-n_write,SEEK_END);
34
35 //ssize_t read(int fd, void *buf, size_t count);
36 char *readBuf=NULL;
37 readBuf=(char*)malloc(sizeof(char)+1);
38 int n_read = read(fd,readBuf,n_write);
39 if(n_read!=-1){
40 printf("read %d byte to readBuf,context is %s\n",n_read,readBuf);
41 }
42 close(fd);
43 return 0;
44 }
二、O_APPEND每次写时都加到文件的尾巴
若没有添加的话,buf缓冲区里的字符串信息会与文件file1里的信息会发生覆盖
若添加了,每次写时都添加到文件的尾端
7 int main()
8 {
9 int fd;
10 // fd = open("./file1",O_RDWR);
11 // if(fd==-1){
12 // printf("open file1 failed\n");
13 fd = open("./file1",O_RDWR|O_CREAT|O_APPEND,0600);
14 if(fd==-1){
15 printf("open file1 \n");
16 }
17 else if(fd==3){
18 printf("open or creat file1 sucess\n");
19 }
20 // }
21 printf("fd=%d\n",fd);
三、O_TRUNC属性打开文件,直接覆盖掉之前文件内容
7 int main()
8 {
9 int fd;
10 // fd = open("./file1",O_RDWR);
11 // if(fd==-1){
12 // printf("open file1 failed\n");
13 fd = open("./file1",O_RDWR|O_CREAT|O_TRUNC,0600);
14 if(fd==-1){
15 printf("open file1 \n");
16 }
17 else if(fd==3){
18 printf("open or creat file1 sucess\n");
19 }
20 // }
21 printf("fd=%d\n",fd);
22
四、创建文件create()
7 int main()
8 {
9 int fd;
10 // fd = open("./file1",O_RDWR);
11 // if(fd==-1){
12 // printf("open file1 failed\n");
13 // fd = open("./file1",O_RDWR|O_CREAT|O_TRUNC,0600);
14
15 // int creat(const char *pathname, mode_t mode);
16 fd=creat("/home/guoming/FILE/file2",S_IRWXU);
17 if(fd==-1){
18 printf("open file2 failed\n");
19 }
20 else if(fd==3){
21 printf("open or creat file1 sucess\n");
22 }
23 // }
24 printf("fd=%d\n",fd);