写入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都是相同的文件描述符的重复,打开读取和写入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容