#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define SIZE 100
void func(int i)
{
return ;
}
int main() {
int filedes1[2];
int filedes2[2];
while(pipe(filedes1));
while(pipe(filedes2));
int pid1,pid2;
int len,i;
char a[SIZE];
pid1 = fork();
if(pid1) //父进程
{
pid2 = fork();
if(pid2)
{
printf("请输入要转换的字符串:");
scanf("%s",a);
len = strlen(a);
write(filedes1[1],&len,sizeof (int));
write(filedes1[1],a,len+1);
kill(pid1,10);
waitpid(pid1,NULL,0);
waitpid(pid2,NULL,0);
} else{
//第二个子进程
signal(10,func);
waitpid(pid1,NULL,0);
read(filedes2[0],&len,sizeof (int));
read(filedes2[0],a,len+1);
printf("%s\n",a);
}
}else{
//第一个子进程
signal(10,func);
waitpid(getppid(),NULL,0);
read(filedes1[0],&len,sizeof (int));
read(filedes1[0],a,len+1);
i = 0;
while(a[i]!='\0')
{
if(a[i]>='a' && a[i]<='z')
{
a[i]=a[i]-32;
}else if(a[i]>='A' && a[i]<='Z')
{
a[i]=a[i]+32;
}
i++;
}
write(filedes2[1],&len,sizeof(int));
write(filedes2[1],a,len+1);
kill(pid2,10);
}
return 0;
}
多进程和信号,刚刚开始学,在macOS里面用clion没有问题,在乌班图虚拟机运行中会出现user define signal 1,编译没有问题
不知道你这个问题是否已经解决, 如果还没有解决的话: