问题描述
我的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 (将#修改为@)