📄 parent.c
字号:
#include <sys/wait.h>#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define PARENTPORT 2234#define CHILDPORT 1234#define MAXSOCKFD 10#define NULL 0struct msg{ int processid; char strmsg[100];};int main(void){ int ChildId=0; int ParentId; //char *argv={"/bin/ls",".",(char *)0}; //char *envp={"PATH=/bin",0}; struct msg parentmsg; int sockfd; struct sockaddr_in addr; struct sockaddr_in remote_addr; int addr_len=sizeof(struct sockaddr_in); int remote_len=sizeof(struct sockaddr_in); char buffer[256]; if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0) { perror("socket"); exit(1); } //remote child bzero(&remote_addr,sizeof(remote_addr)); remote_addr.sin_family=AF_INET; remote_addr.sin_port=htons(CHILDPORT); remote_addr.sin_addr.s_addr=htonl(INADDR_ANY); //local bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(PARENTPORT); addr.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sockfd,&addr,sizeof(addr))<0) { perror("connect"); exit(1); } if(fork()==0) { printf("child is starting...\n"); ChildId=getpid(); execve("./child",NULL,NULL); printf("child is exiting...\n"); exit(0); } printf("process [%d]:parent in execution...\n",getpid()); ParentId=getpid(); while(1) { //send msg to child parentmsg.processid=ParentId; strcpy(parentmsg.strmsg,"hello child i am your parent"); memcpy(buffer,&parentmsg,sizeof(struct msg)); sendto(sockfd,buffer,256,0,&remote_addr,remote_len); sleep(1); //recv msg from child recvfrom(sockfd,buffer,sizeof(buffer),0,&remote_addr,&remote_len); memset(&parentmsg,0,sizeof(struct msg)); memcpy(&parentmsg,buffer,sizeof(struct msg)); printf("The child processid is %d,and the content is %s\n",parentmsg.processid,parentmsg.strmsg); sleep(1); } sleep(2); if(wait(NULL)>0) printf("process [%d]:parent detects terminating child \n",getpid()); printf("process [%d]:parent terminating ... \n",getpid());}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -