加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:38:51 所属栏目:安全 来源:网络整理
导读:我正在开发一个作业,程序将文件描述符作为参数(通常来自exec调用中的父级),并从文件读取并写入文件描述符,在我的测试中,我意识到该程序将工作从命令行,如果我使用0,1或2作为文件描述符,不给出错误.这对我来说很有意义,除了我可以写到stdin,并在屏幕上显示.
我正在开发一个作业,程序将文件描述符作为参数(通常来自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都是相同的文件描述符的重复,打开读取和写入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读