gpt4 book ai didi

c - 写入 stdin 并从 stdout 读取(UNIX/LINUX/C 编程)

转载 作者:太空狗 更新时间:2023-10-29 16:34:03 26 4
gpt4 key购买 nike

我正在做一个作业,其中程序将文件描述符作为参数(通常来自 exec 调用中的父级)并从文件中读取并写入文件描述符,在我的测试中,我意识到如果我使用 0、1 或 2 作为文件描述符,程序将在命令行运行并且不会给出错误。这对我来说很有意义,除了我可以写入 stdin 并让它显示在屏幕上。

这有解释吗?我一直认为 stdin/stdout 有一些保护,你当然不能 fprintf 到 stdin 或 fgets 从 stdout。

#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;
}

最佳答案

尝试在标记为只读的文件上写入或反之亦然会导致writeread 返回-1,并失败。在这种特定情况下,stdin 和 stdout 实际上是同一个文件。本质上,在你的程序执行之前(如果你不做任何重定向)shell 会:

  if(!fork()){
<close all fd's>
int fd = open("/dev/tty1", O_RDWR);
dup(fd);
dup(fd);
execvp("name", argv);
}

因此,stdin、out 和 err 都是同一个文件描述符的副本,以读写方式打开。

关于c - 写入 stdin 并从 stdout 读取(UNIX/LINUX/C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com