#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <wait.h> int main(){ int sv[2]; pid_t pid; char buf[128]; memset(buf, 0, sizeof(buf)); if(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) != 0){ perror("socketpair"); return 1; } pid = fork(); if(pid < 0){ perror("fork"); return 1; } if(pid == 0){ close(sv[0]); read(sv[1], buf, sizeof(buf)); printf("child process : data from parant process [%s]\n", buf); exit(0); } else { int status; close(sv[1]); write(sv[0], "HELLO", 5); printf("parent process : child process id %d\n", pid); wait(&status); } return 0; }
github源代码linux
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <wait.h> int main(){ int p[2]; pid_t pid; char buf[128]; memset(buf, 0, sizeof(buf)); if(pipe(p) != 0){ perror("pipe"); return 1; } pid = fork(); if(pid < 0){ perror("fork"); return 1; } if(pid == 0){ close(p[1]); read(p[0], buf, sizeof(buf)); printf("child process : data form parent process [%s]\n", buf); exit(0); } else{ close(p[0]); write(p[1], "aaaa", 4); printf("parent process : child process is %d\n", pid); int status; wait(&status); } return 0; }
github源代码c++
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <wait.h> int main(){ int p[2]; pid_t pid; char buf[1024]; memset(buf, 0, sizeof(buf)); if(pipe(p) != 0){ perror("pipe"); return 1; } pid = fork(); if(pid < 0){ perror("fork"); return 1; } if(pid == 0){ printf("child process : my_id=%d\n",getpid()); close(p[0]); //把标准输出给管道1了 dup2(p[1], fileno(stdout)); char *argv[ ]={"ls", "/home/ys/cpp/network"}; //利用ls命令,往标准输出里,输入文件夹里文件的的名字,标准输出又链接到了上面开的管道1里。 if(execve("/bin/ls", argv, NULL) < 0){ perror("exec"); return 1; } exit(0); }else{ int n; FILE* filep; close(p[1]); printf("parent process : child process id=%d\n", pid); //先打开管道1 filep = fdopen(p[0], "r"); if(filep == NULL){ perror("fdopen"); return 1; } //再从管道1里读取数据 while(fgets(buf, sizeof(buf), filep) != NULL){ printf("get:%s\n", buf); } int status; wait(&status); } return 0; }
github源代码git