Linux 进程间通信(IPC)
Linux 进程间通信(IPC):
Linux系统中除了进程和进程之间通信,我想大家也应该关注用户空间与内核空间是如何通信的,比方说netlink等等。除了传统进程间通信外像Socket通信也需要掌握的!
/*-------------------------------------------------------------------------- * Project: aipc.c * Name: zwp * Date: 2014/6 *-------------------------------------------------------------------------*/ #include <sys/types.h> #include <sys/wait.h> #include <sys/socket.h> #include <unistd.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #define MAXLINE 1024 static void sig_pipe(int); int s_pipe(int fd[2]); int main(void) { int n, fd[2]; pid_t pid; char line[MAXLINE]; if(signal(SIGPIPE, sig_pipe) == SIG_ERR) printf("signal error...\n"); if(s_pipe(fd) < 0) printf("pipe error...\n"); else if(pid > 0) { close(fd[1]); while(fgets(line, MAXLINE, stdin) != NULL) { n = strlen(line); if(write(fd[0], line, MAXLINE) != n) printf("write error from pipe...\n"); if((n = read(fd[0], line, MAXLINE)) < 0) printf("read arror from pipe...\n"); if(n == 0) { printf("child closed pipe...\n"); break; } line[n] = 0; if(fputs(line, stdout) == EOF) printf("fputs error...\n"); } if(ferror(stdin)) printf("fgets error on stdin...\n"); exit(0); } else { close(fd[0]); if(fd[1] != STDIN_FILENO) { if(dup2(fd[1], STDIN_FILENO) != STDIN_FILENO) printf("dup2 error to stdin...\n"); } if(fd[1] != STDOUT_FILENO) { if(dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO) printf("dup2 error tostdout..\n"); } if(execl("./add2", "add2", NULL) < 0) printf("execl error...\n"); } } int s_pipe(int fd[2]) { return (socketpair(AF_UNIX, SOCK_STREAM, 0, fd)); } static void sig_pipe(int sign) { printf("SIGPIPE caught...\n"); exit(1); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。