C语言 从特定的文件描述符读取输入



如果我知道输入到我的程序将来自具有(非标准)ID的文件描述符,我如何从中读取?

例如,如果我需要从ID为3的文件描述符中读取,我该怎么做?

还有,有没有一种简单的方法可以在BASH中测试它,而不必创建另一个程序和管道?

这是我目前得到的:

char buffer[100];
FILE* fd = fdopen(3, "r");
fgets(buffer, sizeof buffer, fd);
sscanf(buffer, "%d", &whatever);

它编译,但得到一个分割错误,当我运行它。我看着它在gdb和它卡住在fgets,所以我想我做错了什么?可能是因为当我在测试时,文件描述符3上的文件没有结束(再次,如果我能在BASH中正确地测试它就太好了)。

在bash中,假设您的可执行文件是"a.out",执行

./a.out 3< testfile

将testfile分配给文件描述符3

同样的调用在bash, sh, zsh,…

如果您之前没有打开它,则没有文件描述符为3的文件。fdopen()失败,因此fdNULL,导致在fgets()上尝试分割错误。

总是检查函数调用的返回值

相关内容

  • 没有找到相关文章

最新更新