在我的 C 程序中,我进行了一个执行“cat”UNIX 命令的系统调用,就像这样。
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