Обычно, когда вы хотите проверить, существует ли файл, это потому, что вы хотите создать этот файл, если его нет. Ответ Грэма Перроу хорош, если вы не хотите создать этот файл, но он уязвим для состояния гонки, если вы это сделаете: другой процесс может создать файл между вами, проверяя, существует ли он, и вы на самом деле открывая это, чтобы написать этому. (Не смейтесь ... это может иметь плохие последствия для безопасности, если созданный файл был символической ссылкой!)
Если вы хотите проверить существование и создать файл, если он не существует, атомарно , чтобы не было условий гонки, тогда используйте это:
#include <fcntl.h>
#include <errno.h>
fd = open(pathname, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0) {
/* failure */
if (errno == EEXIST) {
/* the file already existed */
...
}
} else {
/* now you can use the file */
}