(一) 编写一个关于进程通信的简单程序,子进程送一串消息给父进程,父进程收到消息后把它显示出来。 要求: 两个子进程分别向管道写一句话: Child process 1 is sending a message! Child process 2 is sending a message! 而父进程则从管道中读出来自两
(一) 编写一个关于进程通信的简单程序,子进程送一串消息给父进程,父进程收到消息后把它显示出来。
要求:
两个子进程分别向管道写一句话:
Child process 1 is sending a message!
Child process 2 is sending a message!
而父进程则从管道中读出来自两个子进程的消息,显示屏幕上,且父进程要先接收子进程1的消息,在接受子进程2的消息。
#include
#include
#include
#define SIZE 50
int main()
{
int p1, p2;
int fd[2];
char str[50];
while((pipe(fd)) == -1);
while((p1 = fork()) == -1);
if(p1)
{
while((p2 = fork()) == -1);
if(p2)
{
//parent
wait(0);
read(fd[0], str, SIZE);
printf("%s\n", str);
wait(0);
read(fd[0], str, SIZE);
printf("%s\n", str);
}
else
{
//child2
lockf(fd[1], 1, 0);
sleep(2);
strcpy(str, "Child process 2 is sending messages!\n");
write(fd[1], str, SIZE);
lockf(fd[1], 0, 0);
}
}
else
{
//child1
lockf(fd[1], 1, 0);
sleep(2);
strcpy(str, "Child process 1 is sending messages!\n");
write(fd[1], str, SIZE);
//sleep(2);
lockf(fd[1], 0, 0);
}
} (二)父进程等待用户从控制台(键盘)输入字符串,通过管道传给子进程;子进程收到后,对字符串进行大小写转换后, 输出到标准 输出(显示器)。
#include
#include
#include
#define SIZE 50
int main()
{
int p, fd[2];
int i = 0;
char str[SIZE];
while((pipe(fd)) == -1);
while((p = fork()) == -1);
if(p)
{
//parent
lockf(fd[1], 1, 0);
printf("Please input the string:");
scanf("%s", str);
write(fd[1], str, SIZE);
lockf(fd[1], 0, 0);
wait(0);
read(fd[0], str, SIZE);
printf("reversed string is : %s\n", str);
}
else
{
read(fd[0], str, SIZE);
while(str[i] != '\0')
{
if('A'
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did94850