Tim*_*Tim 15 c unix stdin stdout read-write
我工作的分配,其中一个程序把文件描述符作为参数(一般在exec调用父),并从文件中读取和写入文件的描述符,并在我的测试中,我意识到,程序会工作从命令行开始,如果我使用0,1或2作为文件描述符,则不会出错.这对我来说很有意义,除了我可以写入stdin并让它显示在屏幕上.
对此有解释吗?我一直认为在stdin/stdout上有一些保护,你当然不能从stdout到stdin或fgetsf.
#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;
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 12
尝试在标记为readonly或反之亦然的文件上写入将导致write并read返回-1,并且失败.在这种特定情况下,stdin和stdout实际上是同一个文件.实质上,在程序执行之前(如果你不进行任何重定向),shell会:
if(!fork()){
<close all fd's>
int fd = open("/dev/tty1", O_RDWR);
dup(fd);
dup(fd);
execvp("name", argv);
}
Run Code Online (Sandbox Code Playgroud)
因此,stdin,out和err都是相同文件描述符的副本,为读取和写入打开.
最佳猜测 - stdin 指向输入的来源,即您的终端,而 stdout 指向输出应该去的地方,即您的终端。因为它们都指向同一个地方,所以它们可以互换(在本例中)?
| 归档时间: |
|
| 查看次数: |
35451 次 |
| 最近记录: |