从特定文件描述符中读取输入

时间:2011-05-01 10:58:19

标签: c file unix pipe file-descriptor

如果我知道我的程序输入将来自具有(非标准)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中正确测试它会很好)。

2 个答案:

答案 0 :(得分:2)

如果之前没有打开它,那么 没有带文件描述符3的文件。fdopen()失败,因此fdNULL,导致在其上尝试fgets()时出现分段错误。

始终检查函数调用的返回值。

答案 1 :(得分:2)

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

./a.out 3< testfile

将testfile分配给文件描述符3

同样的调用适用于bash,sh,zsh,...
它在csh,tcsh,...中不起作用。