fopen("/img/logo.png","x");
Это не создаст каталог img в любом случае. Если каталог не существует, он всегда выдаст это предупреждение.
Предупреждение: fopen (/img/logo.png): не удалось открыть поток: нет такого файла или каталога
fopen("logo.png","x");
Если logo.png еще не существует, он будет создан без предупреждения.
Если logo.png уже существует, он всегда выдаст это предупреждение.
Предупреждение: fopen (logo.png): не удалось открыть поток: нет такого файла или каталога
fopen ("", "x") эквивалентно указанию флагов O_EXCL | O_CREAT для основного системного вызова open (2). Теперь позвольте мне помочь вам понять, почему это происходит.
В POSIX флаг O_CREAT приводит к созданию файла, если он этого не делает
уже существует. Если вы включите флаг O_CREAT, вы также должны передать третий аргумент, чтобы открыть для обозначения разрешений. Если вы хотите избежать записи поверх существующего файла, используйте комбинацию O_CREAT | O_EXCL. Эта комбинация возвращает ошибку, если файл уже существует.
C программа с использованием POSIX
#include <fcntl.h>
#include <sys/stat.h>
int open(const char *path, int oflag, ...);
Вывод:
Поэтому мы будем использовать режим «x» только тогда, когда мы хотим избежать записи поверх существующего файла.