Понимание одновременной записи файлов из нескольких процессов

Отсюда :Является ли файл приложения атомарным в UNIX

Рассмотрим случай, когда несколько процессов открывают один и тот же файл и добавляют к нему. O_APPEND гарантирует, что поиск в конце файла и затем начало операции записи является атомарным. Таким образом, к одному и тому же файлу можно добавить несколько процессов, и ни один процесс не перезапишет другие процессы. запись, насколько каждый размер записи <= PIPE_BUF.

Я написал тестовую программу, где несколько процессов открываются и пишут в один файл (write(2)). Я уверен, что каждый размер записи> PIPE_BUF (4 КБ). Я ожидал увидеть случаи, когда процесс переписывает кого-то другого »с данными. Но этого не происходит. Я тестировал с разными размерами записи. Это просто удача или есть причина, почему это неслучилось? Моя конечная цель - понять, нужно ли нескольким процессам, присоединяющимся к одному и тому же файлу, координировать свои записи.

Вот полная программа. Каждый процесс создает буфер int, заполняет все значения своимиrank, открывает файл и пишет в него.

Спецификации: OpenMPI 1.4.3 на 64-битном Opensuse 11.3

Скомпилировано как: mpicc -O3 test.c, запустится как: mpirun -np 8 ./a.out

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int 
main(int argc, char** argv) {
    int rank, size, i, bufsize = 134217728, fd, status = 0, bytes_written, tmp_bytes_written;
    int* buf;
    char* filename = "/tmp/testfile.out";

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    buf = (int*) malloc (bufsize * sizeof(int));   
    if(buf == NULL) {
        status = -1;
        perror("Could not malloc");
        goto finalize;
    }
    for(i=0; i

Ответы на вопрос(3)

Ваш ответ на вопрос