1.双文件.c进程管道通信
1.1
int main(int argc, const char *argv[])
{
int arr[2]={0};
int ret =pipe(arr);
if(ret==-1)
{
perror("pipe");
return 0;
}
int res=fork();
if(res>0){
int buf[2];
scanf("%d %d",&buf[0],&buf[1]);
close(arr[0]);
write(arr[1],buf,sizeof(buf));
}
else{
if(execl("./qw","qw",NULL)==-1)
perror("exec");
}
return 0;
}
1.2
int main(int argc, const char *argv[])
{
close(4);
int buf1[2];
read(3,buf1,8);
printf("%d\n",buf1[1]*buf1[0]);
for(int i=buf1[0];i<=buf1[1];i++)
{
int k=0;
for(int j=1;j<=sqrt(i);j++)
{
if(i%j==0)
k++;
}
if(k<=1)
printf("%d\t",i);
}
putchar(10);
return 0;
}
1.3 实现效果
2.用有名管道通信 实现父子进程 回文字符串 的判断
int main(int argc, const char *argv[])
{
int res=fork();
if(res>0){
if(access("./fifo",F_OK)==-1)
mkfifo("./fifo",0666);
int p1=open("./fifo",O_WRONLY|O_TRUNC);
char buf[32];
scanf("%32s",buf);
write(p1,buf,sizeof(buf));
}
else{
sleep(1);
if(access("./fifo",F_OK)==-1)
mkfifo("./fifo",0666);
int p2=open("./fifo",O_RDONLY);
char buf1[32];
read(p2,buf1,sizeof(buf1));
int i=0;int j=strlen(buf1)-1;int m=0;
while(i<j){
if(buf1[i]!=buf1[j])
m=1;
i++;j--;
}
if(m==0){
printf("回文字符\n");
}
else{
printf("NO\n");
}
}
}
实现效果