一个终端一次只能向一个进程或线程发送数据么
发表于 : 2014-05-04 0:51
我实验的时候写了个程序A,这个程序先关闭终端的ICANON模式 (为的是让终端不必等待回车,接受输入后马上传递数据给进程)
然后让这个进程调用read从终端读取数据
代码见下面
void Icanon(){
struct termios tc;
tcgetattr(STDIN_FILENO, &tc);
tc.c_lflag &= ~ICANON;
tcsetattr(STDOUT_FILENO, TCSANOW, &tc);
}
int main(){
Icanon();
char c;
while(read(STDIN_FILENO, &c, 1)){
printf(" %c", c,);
fflush(stdout);
}
puts("End");
return 0;
}
然后我写了另外一个程序B, 这个程序先fork(), 然后再调用程序A;
这样运行程序B后,后台应该有两个A程序在运行,根据上面程序A的代码,
每当我输入一个字符,后面应该跟着输出两个相同的字符才对,但是实际上只跟着输出了一个字符,
说明在后台运行的两个程序A中, 只有一个得到了数据, 请问一下这个是怎么回事啊?
然后让这个进程调用read从终端读取数据
代码见下面
void Icanon(){
struct termios tc;
tcgetattr(STDIN_FILENO, &tc);
tc.c_lflag &= ~ICANON;
tcsetattr(STDOUT_FILENO, TCSANOW, &tc);
}
int main(){
Icanon();
char c;
while(read(STDIN_FILENO, &c, 1)){
printf(" %c", c,);
fflush(stdout);
}
puts("End");
return 0;
}
然后我写了另外一个程序B, 这个程序先fork(), 然后再调用程序A;
这样运行程序B后,后台应该有两个A程序在运行,根据上面程序A的代码,
每当我输入一个字符,后面应该跟着输出两个相同的字符才对,但是实际上只跟着输出了一个字符,
说明在后台运行的两个程序A中, 只有一个得到了数据, 请问一下这个是怎么回事啊?