如果我知道输入到我的程序将来自具有(非标准)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()
失败,因此fd
是NULL
,导致在fgets()
上尝试分割错误。
总是检查函数调用的返回值