Что произойдет, если есть два одновременных запроса на создание каталога в файловой системе (каковы различия между этой проблемой между FS-серверами?)? Будет ли один запрос успешным, а другой - ошибочным, или другой запрос перезапишет первую папку (думаю, по умолчанию это будет глупо. Только если я установлю опцию для этого)? Являются ли эти операции атомарными?
1 ответ
Один добьется успеха, а другой потерпит неудачу. Это согласно manpage:
EEXIST: путь уже существует (не обязательно как каталог). Это включает в себя случай, когда pathname является символической ссылкой, висящей или нет.
Создание каталога обязательно является атомарным, потому что любой другой процесс, который одновременно проверяет систему, обнаружит, что новый каталог существует или нет. Не существует такой вещи, как частично созданный каталог.
Вы не можете установить опцию, чтобы mkdir()
перезаписывал существующие каталоги. Поведение, предусмотренное стандартом при попытке создать уже существующий каталог, приводит к сбою с кодом ошибки, приведенным выше.