看这个问题好久都没人回答。。。
挺简单的,fork一子一父进程,父进程循环读入文件内容,并写进道管道里面,子进程循环从管道接收然后打印出来。
撸码辛苦,望采纳。
#include <stdio.h>#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
int main()
{
pid_t result
int n,num
int pipe_fd[2]
int fd
char buf1[100],buf2[100]
memset(buf1,0,sizeof(buf1))
memset(buf2,0,sizeof(buf2))
fd = open("/home/w.c",O_RDONLY)
if(pipe(pipe_fd)<0)
{
printf("error!\n")
return -1
}
result=fork()
if(result<0)
{
printf("error!\n")
exit(0)
}
else if(result==0)
{
close(pipe_fd[1])
while((n =read(pipe_fd[0],buf1,99))>0)
{
buf1[n] = '\0'
printf("%s",buf1)
memset(buf1,0,sizeof(buf1))
}
}
else
{
close(pipe_fd[0])
while((num = read(fd,buf2,99)) >0){
write(pipe_fd[1],buf2,strlen(buf2))
}
waitpid(result,NULL,0)
}
close(pipe_fd[1])
close(pipe_fd[0])
close(fd)
return 0
}
代码没有问题,主要是while直接printf,时间太短,打屏输出速度跟不上,你看不到父进程输出,下面我修改了一下,增加了sleep,可以看到效果。#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
using namespace std
int main(int argc, char *argv[])
{
int pid
pid = fork()
if(pid == 0)
{//子进程
while(1)
{
printf("child\n")
sleep(1)
}
}
else
{//父进程
while(1)
{
printf("parent\n")
sleep(1)
}
}
return 0
}输出结果:
parent
child
parent
child
parent
child
希望能帮助到你,你的好评是我前进的动力!谢谢!
这个不确定,但通常内核会让子
进程先执行,因为很多时候在创建一个
子进程
后紧接着就调用exec
系统调用
。内核的这些代码我没什么印象了,估计就相当于用了gnu
c的likely、unlikely之类的优化。你不信多试几次,会发现它的确是不能确定的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)