如果我知道程序的输入将来自具有(非标准)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
将测试文件分配给文件描述符 3
相同的调用适用于 bash、sh、zsh、...
它在 csh、tcsh 中不起作用,...
关于c - 从特定文件描述符读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847935/