O_APPEND标志也是在open函数中使用的,当我们使用该标志,我们在向打开的文件写入数据时,就会从文件的末尾开始写入。不过它只会影响文件写入的偏移量,读文件时依然从文件开头开始。
下面来看一段示例代码,向大家展示O_APPEND标志的作用。
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
4 #include <unistd.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 int main(int argc, char argv[]) {
9 char buffer[4];
10 int fd;
11 int ret;
12
13 fd = open(argv[1], O_RDWR | O_APPEND); //使用OAPP_END打开要操作的文件
14 if (-1 == fd) {
15 perror(“open error”);
16 exit(-1);
17 }
18
19 memset(buffer, 0x11, sizeof(buffer)); //将buffer中的数据初始化为0x11
20
21 ret = write(fd, buffer, 4); //向打开的文件中写入4个字节的数据
22 if (-1 == ret) {
23 perror(“write error”);
24 goto err;
25 }
26
27 memset(buffer, 0x00, sizeof(buffer)); //将buffer中的数据清零
28
29 ret = lseek(fd, -4, SEEK_END); //将位置偏移量移动到文件末尾前4个字节处
30 if (-1 == ret) {
31 perror(“lseek error”);
32 goto err;
33 }
34
35 ret = read(fd, buffer, 4); //读取四个字节的数据
36 if (-1 == ret) {
37 perror(“read error”);
38 goto err;
39 }
40 printf(“0x%x 0x%x 0x%x 0x%x\n”, buffer[0], buffer[1],buffer[2], buffer[3]);
41 ret = 0;
42 err:
43 / 关闭文件 */
44 close(fd);
45 exit(ret);
46 }
接下来执行上面的程序看下打印的结果,如下图所示。可以看到文件最后4个字节的数据确实是我们写入的0x11。