Всегда указывайте полный адрес по вашему пути или ./ в текущем каталоге.
Также, в соответствии с этим similar question, доступ (путь, режим) функция делает то, что вам нужно. Используйте его вместо этого. Он возвращает 0 при успехе, или -1 в случае отказа. Поскольку access() выполняет именно то, что вам нужно, вам не нужно его повторно выполнять.
Примечание, наиболее распространенные режимы являются следующие:
F_OK, для проверки, если файл существует.
R_OK, для чтения.
W_OK, для записи.
X_OK, для чтения, записи и выполнения разрешений.
Кроме того, если, например, вам нужно проверить, как чтение и разрешение письма, вы можете иметь побитового или между R_OK и W_OK (или даже между каждыми тремя R_OK, W_OK или X_OK)
Для получения дополнительной информации , введите человек доступа на свой терминал или перейдите по ссылке выше.
Опасайтесь: access() является частью библиотеки unistd.h, то есть стандарта POSIX. Если вам нужно его использовать в других системах, вам может потребоваться включить разные библиотеки.
Последние 4 строки вашего тела функции эквивалентны 'return! I;'. –
@Nips: эта функция возвращает ненулевое значение, если данный путь относится к каталогу вместо обычного файла. Если вы хотите, чтобы он возвращал ненулевое значение, только если путь относится к обычному файлу, вам нужно проверить член 'st_mode'' struct stat'. Например, 'return (stat (filename, & buffer) == 0 && S_ISREG (buffer.st_mode)); –