В моей программе на 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?
Спасибо!
Обновление: благодаря комментариям я довольно быстро разобрался с проблемой. Я случайно закрыл stdout ранее в программе, поэтому возникла ошибка, когда программа cat
попыталась напечатать на stdout. Таким образом, похоже, что нет никакой разницы между тем, как C и Perl работают с файловыми дескрипторами: следующая команда генерирует точно такую же ошибку.
$ perl -e 'close(STDOUT); system("cat temp.txt")'
cat: stdout: Bad file descriptor
stdout
? Возможно, он закрыт до звонка? - person   schedule 03.08.2011stdout
по какой-то причине? - person Hasturkun   schedule 03.08.2011