#include int main() {
Pid-t pid;
char *message; int n;
int exit_code;
printf(\test\\n\ pid = fork(); switch(pid) {
case -1:perror(\failed\ exit(1);
case 0:message = \is child\ n = 8; exit_code = 37;
break; default:message = \is parent\ n= 5;
exit_code = 0; break; }
for(;n>0;n--) {
puts(message); sleep(1); }
if(pid != 0) {
int stat_val; pid_t child_pid;
child_pid = wait(&stat_val);
printf(\for child to finish\\n\ {
printf(\exit code is %d\\n\ } Else {
printf(\exit failed\\n\; } }
exit(exit_code); }
运行结果如下: 4、僵尸进程 所谓僵尸进程,子进程先于父进程结束,但是因为父子进程间依然有关系,那么子进程实际上不会真正意义上终结,如果查看当前进程表,会发现该进程依然存在,且会被标记为/。人为产生僵尸进程也并不那么轻松,但是在上面那个等待例子中,如果让子进程先于父进程退出,在父进程结束前调用ps -al命令后就会发现有这么一个僵尸进程,实现方法如下: #include<> #include<> #include<> #include #include int main() { pid_t pid; char *message; int n; int exit_code; printf(\test\\n\ pid = fork(); switch(pid) { case -1:perror(\failed\ exit(1); Case 0:message = \is child\ n = 3; exit_code = 37; break; default:message = \is parent\ n= 12; exit_code = 0; break; } for(;n>0;n--) { puts(message); if(n == 1 ) { printf(\finished\\n\ system(\-al\ } sleep(1); } if(pid != 0) { int stat_val; pid_t child_pid; child_pid = wait(&stat_val); printf(\for child to finish\\n\ { printf(\exit code is %d\\n\ } Else { printf(\exit failed\\n\ } } exit(exit_code); } 运行结果如图: 实 验 报 告
组别 实验项目名称 姓名 同组实验者 实验日期 第16周周四9,10节 实验五套接字编程 教师评语 实验成绩 指导教师 廉文娟 一、实验目的 掌握Socket编程方法,学会UDP Socket和TCP Socket编程。 二、实验内容及其结果 1、Linux上两个进程间的通信 Server端:调用socket函数创建一个socket,然后用bind函数语气本机地址及口号绑定,收到client端消息后,打印出来。 Client端:接收server端发来的字符串,打印出来 Server和client通信截图: UDPSever: #include #include #include #include <> #include <> #include <> #include <> #include <> #include <> #include <> #define PORT 7000 int main(void) { int sockfd,pktlen; char buf[300],buf1[300]; struct sockaddr_in server,client; sockfd=socket(AF_INET,SOCK_DGRAM,0); memset ((char *)&server, sizeof(server), 0); = htons(PORT);似于bzero = AF_INET; = htons(PORT);//端口号 = INADDR_ANY;//设置网络地址,INADDR_ANY表示机器的IP地址 //server需要在listen之前绑定一个大家都知道的地址,就是刚刚初始化好的ip+端口号 bind(s, (struct sockaddr *)&server, sizeof(server)); listen(s,1);//侦听客户端请求,i为socket可以排队链接的最大个数 /*接受client请求,s为server的描述符(即监听socket描述符),第二个参数即指针client的协议地址,第三个参数代表地址长度 返回值ns是一个全新的描述符,是数据传输socket,代表与返回客户的tcp连接*/ namelen = sizeof (client); ns = accept (s, (struct sockaddr *)&client, &namelen); //开始进行网络I/O for (;;)