Я писал пример кода и пытался понять, что происходит, когда два процесса открывают файл в режиме добавления, а затем оба выполняют запись.
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;
}
Когда я запускаю первый процесс2, он откроет файл и будет ждать ввода данных от пользователя, поскольку есть getchar, теперь я запускаю процесс1 и, наконец, продолжаю процесс 2.
Почемуэто вывод: "helloworld", а не только "world"