写入stdin并从stdout读取(UNIX / LINUX / C Programming)

前端之家收集整理的这篇文章主要介绍了写入stdin并从stdout读取(UNIX / LINUX / C Programming)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个作业,程序将文件描述符作为参数(通常来自exec调用中的父级),并从文件读取并写入文件描述符,在我的测试中,我意识到该程序将工作从命令行,如果我使用0,1或2作为文件描述符,不给出错误.这对我来说很有意义,除了我可以写到stdin,并在屏幕上显示.

这是否有解释?我一直以为在stdin / stdout有一些保护,你当然不能fprintf到stdin或从stdout的fgets.

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
    char message[20];
    read(STDOUT_FILENO,message,20);
    write(STDIN_FILENO,20);

    return 0;
}
尝试写入标记为readonly或反之亦然的文件将导致写入和读取返回-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都是相同的文件描述符的重复,打开读取和写入.

猜你在找的Bash相关文章