сбой fputs в C на Mac с Xcode - PullRequest
4 голосов
/ 03 апреля 2010

У меня есть приложение командной строки и код

chdir("/var");

FILE *scriptFile = fopen("wiki.txt", "w");

fputs("tell application \"Firefox\"\n activate\n",scriptFile);

fclose(scriptFile);

и когда я запускаю его в XCode, я получаю EXC_BAD_ACCESS, когда он достигает первого fputs(); вызова

Ответы [ 3 ]

2 голосов
/ 03 апреля 2010

Проверяете ли вы, чтобы файл открывался правильно?

Обычно для записи в / var вам потребуются привилегии суперпользователя, так что это, вероятно, ваша проблема.

2 голосов
/ 03 апреля 2010

Я уже ответил на это в комментарии, и несколько человек сказали вам, что вы сделали неправильно в качестве ответов, но я решил добавить небольшой пример кода с проверкой ошибок:

chdir("/var");

FILE *scriptFile = fopen("wiki.txt", "w");
if( !scriptFile ) {
  fprintf(stderr, "Error opening file: %s\n", strerror(errno));
  exit(-1);
} else {
  fputs("tell application \"Firefox\"\n activate\n",scriptFile);
  fclose(scriptFile);
}

Теперь вы увидите ошибку, если ваш файл не открыт, и она опишет почему (в вашем случае доступ запрещен). Вы можете сделать это для тестирования: 1) заменив свое имя файла на что-либо доступное для записи, например "/tmp/wiki.txt"; или 2) запуск вашей утилиты с привилегиями sudo ./your_command_name.

2 голосов
/ 03 апреля 2010

Возможно, вызов fopen() не удался, потому что у вас нет прав на запись в /var. В этом случае fopen() возвращает NULL, а передача NULL в fputs() приведет к нарушению доступа.

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