网络公司网站模板,湛江专业的免费建站,网站建设中图片联系方式,魏县专业做网站父子进程#xff1a;
父子进程的变量之间存在着读时共享#xff0c;写时复制原则
无名管道#xff1a;
无名管道仅能用于有亲缘关系的进程之间通信如父子进程
代码#xff1a;
#include stdio.h
#include unistd.h
#include sys/types.h
#inc…父子进程
父子进程的变量之间存在着读时共享写时复制原则
无名管道
无名管道仅能用于有亲缘关系的进程之间通信如父子进程
代码
#include stdio.h
#include unistd.h
#include sys/types.h
#include sys/fcntl.h
#include stdlib.h#define N 100int main(int argc, const char *argv[]){pid_t pid;int fdr, fdw;ssize_t nbyte;int fd[2];char buf[N] ;if(argc ! 1 argc ! 3){printf(number error\n);exit(0);}if((fdr open(argv[1], O_RDONLY)) 0){printf(read open error\n);exit(0);}if((fdw open(argv[2], O_CREAT|O_WRONLY|O_TRUNC, 0664)) 0){printf(write open error\n);exit(0);}if(pipe(fd) 0){printf(pipe error\n);exit(0);}pid fork();//创建子进程if(pid 0){printf(fork error\n);exit(0);}else if(pid 0){ // 子进程 while((nbyte read(fd[0], buf, N)) 0){ // 管道读取端读取消息 write(fdw, buf, nbyte); // 写入文件 } }else{while((nbyte read(fdr, buf, N)) 0){ // 在被读写的文件中读取数据 write(fd[1], buf, nbyte); // 在管道写入端写入数据 }}return 0;
}解释
父进程打开并读取读文件中的数据并将数据放入无名管道的写入端子进程从无名管道的读取端读取数据并写入自己事先打开或创建的接受文件直到管道内没有数据最终文件实现复制效果。
注意read函数返还值为真实读取的数据N期望读取的数据
效果