【发布时间】:2011-11-15 01:50:03
【问题描述】:
我正在处理一项任务,其中程序将文件描述符作为参数(通常来自 exec 调用中的父级)并从文件读取并写入文件描述符,在我的测试中,我意识到如果我使用 0、1 或 2 作为文件描述符,程序将从命令行运行并且不会给出错误。这对我来说很有意义,只是我可以写信给标准输入并让它显示在屏幕上。
对此有解释吗?我一直认为标准输入/标准输出有一些保护,你当然不能 fprintf 到标准输入或从标准输出 fgets。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
char message[20];
read(STDOUT_FILENO, message, 20);
write(STDIN_FILENO, message, 20);
return 0;
}
【问题讨论】:
-
请不要将文件 handles 与文件 descriptors 混淆。 您可能不被允许将
fprintf到stdin(尽管我在标准中找不到任何明确禁止它的内容),但这对您是否可以write到文件描述符 0 的影响为零。 -
到底有什么区别?他们没有完成相同的任务吗?
-
胡萝卜和大棒可以完成相同的任务,但它们不是一回事,请问你友好的邻居驴子:-) 句柄是标准 C,描述符是 POSIX。
标签: c unix stdout stdin read-write