在本系列第一篇博文中利用重新打开文件的方式将光标移到开头,这也是在我们做文件写入的时候需要注意到内容。
当我们使用以下句子打开文件时,光标默认是在文件头的,这时如果进行写操作就会覆盖掉原来的文本内容:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
int main()
{
int fd;
fd = open("./file1", O_RDWR);
write(fd, "Hello world.", strlen("Hello world."));
}
O_APPEND 每次写操作都写入文件的末尾
open函数的oflag的这个宏就可以起到将光标移到最后的功能。
int main()
{
int fd;
fd = open("./file1", O_RDWR|O_APPEND);
write(fd, "Hello world.", strlen("Hello world."));
}
--------------------------------分割线--------------------------------
O_TRUNC 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0)
这个就宏比较可怕,可以直接把原来的文本全删了,重新写。
--------------------------------分割线--------------------------------
O_EXCL 如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
使用O_EXCL这个宏可以通过返回值来判断open的文件是否存在。
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
4 #include <stdio.h>
5
6 int main()
7 {
8 int fd;
9
10 fd = open("./file", O_RDWR|O_CREAT|O_EXCL, 0600);
11 if(fd == -1)
12 {
13 printf("fail exist\n");
14 }
15
16 return 0;
17 }