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

标签 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 中正确测试这一点,那就太好了)。

最佳答案

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

./a.out 3< testfile

将测试文件分配给文件描述符 3

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

关于c - 从特定文件描述符读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847935/

相关文章:

c - 将一段伪代码翻译成 C

c# - 无法写入另一个进程 exp,多线程正忙的文件

c++ - 从同一文件构造基类和继承类

javascript - 发布文件是否需要 <form> 标签和按钮?

C代码多线程Pthread

php - 根据列值合并/粘贴 csv 文件

c - 如何计算keil c中执行一条指令所需的时间

c - char * 的段错误

c - sigwait() 和信号处理程序

linux - Bash:使用新的 PGID 生成一个进程