gpt4 book ai didi

c - C 中系统调用的文件句柄问题

转载 作者:行者123 更新时间:2023-11-30 14:28:01 25 4
gpt4 key购买 nike

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

最佳答案

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

关于c - C 中系统调用的文件句柄问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com