В моей программе на C я выполняю системный вызов, который выполняет команду UNIX 'cat', что-то вроде этого.
sprintf(command, "cat %s", filename);
fprintf(stderr, "Executing command: '%s'\n", command);
system(command);
Когда я компилирую и запускаю программу, команда не выполняется должным образом.вместо этого я получаю следующую ошибку.
Executing command: 'cat temp.txt'
cat: stdout: Bad file descriptor
У меня вопрос двоякий.
- Почему этот код работает неправильно и как я могу это исправить?
- Когда я пытаюсь что-то наподобие
perl -e 'system("cat temp.txt")'
в командной строке, оно работает как положено.В чем разница между тем, как Perl работает с дескрипторами файлов, и тем, как C работает с ними?
Спасибо!
Обновление : благодаря комментариям я понялдовольно быстро.Ранее я случайно закрыл стандартный вывод в программе, поэтому произошла ошибка, когда программа cat
пыталась распечатать на стандартный вывод.Таким образом, похоже, что нет разницы между тем, как C и Perl обрабатывают файловые дескрипторы: следующая команда генерирует точно такую же ошибку.
$ perl -e 'close(STDOUT); system("cat temp.txt")'
cat: stdout: Bad file descriptor