【发布时间】:2014-05-19 16:43:10
【问题描述】:
我的任务是编写 3 个通过管道连接在一起的进程。第一个应该读取用户的输入,第二个应该从第一个读取并将字母变为大写,第三个应该从第二个读取并打印结果。问题是 scanf 只读取第一个按下的字符,然后程序结束。我做错了什么?我试图发送硬编码的字符串,它工作得很好。
#include <unistd.h>
#include <stdio.h>
#include <ctype.h>
#define ODCZYT 0
#define ZAPIS 1
int main(){
char readbuffer[80];
char tempbuffer[80];
char printbuffer[80];
int i=0;
int potok[2];
int potok2[2];
pid_t pid_A, pid_B, pid_C;
pipe( potok );
pipe( potok2);
puts( "fork" );
if(!(pid_A = fork()) )
{
puts("Podaj string:");
close(potok[ODCZYT]);
close(potok2[ODCZYT]);
close(potok2[ZAPIS]);
scanf( "%s", readbuffer )
write(potok[ZAPIS],readbuffer, sizeof(readbuffer));
close(potok[ZAPIS]);
}
if(!(pid_B = fork()) )
{
close( potok[ZAPIS] );
close(potok2[ODCZYT]);
read( potok[ODCZYT], tempbuffer, sizeof(tempbuffer));
close(potok[ODCZYT]);
while(tempbuffer[i]){
tempbuffer[i]=toupper(tempbuffer[i]);
i++;
}
write(potok2[ZAPIS],tempbuffer, sizeof(tempbuffer));
close(potok2[ZAPIS]);
}
if( !(pid_C = fork()) ) {
close(potok[ODCZYT]);
close(potok[ZAPIS]);
close(potok2[ZAPIS]);
read( potok2[ODCZYT], printbuffer, sizeof(printbuffer));
puts(printbuffer);
close(potok2[ODCZYT]);
}
return 0;
}
【问题讨论】:
-
您有多个小错误,其中一些已在下面得到解答。首先,您必须学会检查您的返回码。何时以及是否做很多事情会变得更加清晰。