读取来自特定文件描述符的输入

| 如果我知道程序的输入将来自具有(非标准)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,...中起作用 它在csh,tcsh,...中不起作用     
如果您之前未打开过文件,则不会有文件描述符为3的文件。由于
fdopen()
失败,因此
fd
NULL
,因此在对其尝试
fgets()
时会导致分段错误。 始终检查函数调用的返回值。     

要回复问题请先登录注册