добрый день!
вопрос такой:
что касается операционных систем на ядре Linux — то для них операция "открыть файл (для записи) или создать его (если его нет)" является ли атомарной и консистентной?
в терминах C — например эта функция:
#include <stdio.h>
FILE *fopen(const char *path, const char *mode); // где mode = "w"
// Truncate file to zero length or create text file for
// writing. The stream is positioned at the beginning of the file.
например, гипотетическая ситуация такая:
предположим, что сейчас файла «/run/my_super_file» — нет в каталоге «/run/».
но вдруг ни-с-того-ни-с-сего набежали тучи, и великое количество процессов вдруг-сразу-ОДНОВРЕМЕННО сделали вызов f = fopen("/run/my_super_file", "w");
!
в этом случае:
1.[главный вопрос]: будут ли в итоге — все-ВСЕ эти процессы иметь дело с ровно-с-одним и тем же файлом? или кое-кто из процессов создаст свою собственную версию файла(?), и в этом случае очевидно предположить что неудачливый файл создастся без своего имени и сотрётся сразу после закрытия файлового дескриптора?
2. завершится ли эта команда у ВСЕХ этих процессов успешно? или кое-какие процессы отрапортируют ошибку (f == 0; errno == ...
)?
3. будет ли различаться это поведение — в зависимости от различных файловых систем?
4. будут ли другие неожиданные последствия, которые я тут не упомянул?[этот вопрос снимаю, так как он слишком не конкретный :)]
спасибо за разъяснения! ^_^