функция open () в C - PullRequest
       3

функция open () в C

0 голосов
/ 28 августа 2011

После открытия каталога я хочу проверить, находится ли команда (например, ls) в указанном каталоге, но open возвращает целое число, я думаю ... после токенизации у меня осталось несколько каталогов ... так что я могуделать??Мне сказали использовать только функцию open (): ((

int       Account_Master;
    .  .  .
  Account_Master = open ("accounts.dat", O_RDONLY);
  if (Account_Master >0) {
    printf ("Open succeeded.\n");

это пример, который я использовал .. какой смысл открывать файл, если он бесполезен?

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Возвращаемое целое число может быть передано другим функциям, таким как read, fstat и close.Если вы просто хотите проверить, существует ли файл, используйте stat:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
  struct stat statInfo;
  char* fn = argc>1 ? argv[1] : "/bin/ls";
  int res = stat(fn, &statInfo);
  if (res != 0) {
     printf("File %s does not exist.\n", fn);
     return 1;
  }
  if (statInfo.st_mode & S_IXUSR) {
     printf("Owner can execute the file %s\n", fn);
     return 0;
  }
  printf("File %s is there, but not executable.\n", fn);
  return 2;
}

Если вы не хотите проверять отдельный файл, но целый каталог, имейтевместо этого посмотрите readdir.

1 голос
/ 28 августа 2011

Домашнее задание? Если вам разрешено использовать open, то решение состоит в том, чтобы попытаться открыть файл. Если вызов выполнен успешно, файл существует. Если это не удалось, то его не существует.

Редактировать: строго говоря, вы также должны проверить, что errno == ENOENT. В противном случае произошла ошибка другого типа, не позволяющая открыть файл.

Не забудьте закрыть возвращенный файл после успешного вызова.

Кстати, пример в вашем вопросе не совсем корректен. open также может преуспеть, возвращая 0. Это необычно, поскольку fd 0 обычно уже занято.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...