我正在编写示例代码,试图了解当两个进程以追加模式打开文件然后都执行写操作时会发生什么情况。
process1.c
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd = open("hello.txt", O_WRONLY| O_APPEND);
off_t curpos;
curpos = lseek(fd, 0, SEEK_CUR);
printf("curpos:%lu\n", curpos);
perror("open");
write(fd, "hello", sizeof("hello"));
close(fd);
return 0;
}
process2.c
int main(int argc, char *argv[])
{
off_t curpos;
int fd = open("hello.txt", O_WRONLY | O_APPEND);
curpos = lseek(fd, 0, SEEK_CUR);
printf("curpos:%lu\n", curpos);
perror("open");
getchar();
curpos = lseek(fd, 0, SEEK_CUR);
printf("curpos:%lu\n", curpos);
write(fd, "world", sizeof("world"));
close(fd);
return 0;
}
当我第一次运行process2时,它将打开文件并等待用户输入,因为存在getchar,我现在运行process1,最后继续process2。
为什么输出:“ helloworld”而不是“ world”