在Linux中,当进程A从进程B的标准输出中读取时,A是否会从B窃取数据?

问题描述

我的Linux中有两个运行的shell。外壳程序A(pid = 1946)和外壳程序B。在外壳程序B中,它运行一个程序,该程序不断从/ proc / 1946 / fd / 1读取并打印出所得到的内容。我以为从外壳B可以看到外壳A中显示内容,但看来我错了。例如: 启动外壳B中的程序后,我在外壳A中键入“ echo hi”,然后按Enter。外壳A仅显示

$ehh

外壳B显示

$a.out
co i

我认为,即使外壳A的stdout中的数据被窃取,由于外壳A的stdin完好无损,它也可以成功执行“ echo hi”。但这似乎是不正确的。

有人知道为什么会这样吗?真的很感谢!下面是在外壳B中运行的程序的代码

#include <sys/ioctl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

void stackchar(char c)
{
    if (ioctl(0,TIOCSTI,&c) < 0) {
        perror("ioctl");
        exit(1);
    }
}
int main(int argc,char *argv[])
{
    int tid;

    int t1fd = open("/proc/1946/fd/1",O_RDONLY);
    char cbuf;
    while(read(t1fd,&cbuf,1)){
        printf("%c",cbuf);
    }
    return 0;
} 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)