0

在我的 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

我的问题有两个。

  1. 为什么此代码无法正常工作,我该如何解决?
  2. 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
4

1 回答 1

2

似乎您的默认stdout文件描述符不存在。stdout已经关闭。

于 2011-08-03T17:29:36.207 回答