поведение записи при открытии файла в нескольких процессах - PullRequest
0 голосов
/ 04 мая 2019

Я писал пример кода и пытался понять, что происходит, когда два процесса открывают файл в режиме добавления, а затем оба выполняют запись.

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"

...