我在使用linux中的管道時遇到了問題。我的工作是這樣的:在C使用管道進行過程通信
寫一個程序,這將創建一個孩子。子進程將使用管道與父進程進行通信。父進程會給出一個0 = y之間的隨機數,然後父親會向用戶詢問他的名字,他會像這樣發佈它(George - > egroeG)。
我的代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
void myalarm(int sig) {
printf("\nTime is out. Exiting...\n");
exit(0);
}
int main(int argc, char **argv){
int x, x1, n, m, pid, fd1[2];
int y = rand() % 100 + 2;
int i=0;
char *name, *arxi;
if (pipe(fd1) == -1) {
perror("ERROR: Creating Pipe\n");
exit(1);
}
pid = fork();
switch(pid) {
case -1:
perror("ERROR: Creating Child Proccess\n");
exit(99);
case 0:
close(fd1[0]); /*Writer*/
printf("\nGive a number between 1 & 100:\n");
scanf("%d", &x);
n = write(fd1[1], x, 1);
/*dup2(fd1[0],0);*/
while (x < 0 || x > 100) {
printf("ERROR:You gave a wrong number...");
printf("\nGive a number between 1 & 100:\n");
scanf("%d", &x);
}
close(fd1[1]);
break;
default:
close(fd1[1]); /*Reader*/
printf("I Am The Father Process...\n");
printf("y = %d\n", y);
m = read(fd1[0], x1, 0);
/*dup2(fd1[1],1);*/ close(fd1[0]);
if (x1 < y) {
kill(pid, SIGTERM); //termination of the child process
}
else {
signal(SIGALRM, myalarm);
printf("Please, type in your name:\n");
fflush(stdout);
alarm(10); //Start a 10 seconds alarm
scanf("%s", name);
arxi = name;
alarm(0);
while(*name != '\0') {
name++;
}
name--;
while(name >= arxi) {
putchar(*name);
name--;
}
printf("%s\n", name);
}
wait(&pid);
break;
}
return 0;
}
因爲我的英語不是那好,給我一些東西在c。 – Konst 2010-11-08 14:26:09
看起來像功課嗎? – 2010-11-08 14:27:59
請編輯您的文章並將所有代碼放入代碼格式。 – 2010-11-08 14:28:32