c 理解创建多进程

下面的程序是创建n个打印进程

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main(void){
	int t=0;
    while(1){    //循环一次,父进程创建一新进程
		
		pid_t pid=fork();    //从这句后就是主程序创建一新进程,每个线程pid值选择自己执行的代码
		if(pid==0){     //子进程     
			while(1){
		
			printf("%d:%d\n",getpid(),t);
			t++;
			sleep(1);
			}	
			
		}else{          //父进程
			sleep(5);
		}
	}
}

在这个程序的基础上就会理解服务器的并行接收客户端的原理了,这种属于批量创建新进程,每个新进程执行相同的代码。

采用多进程的并发服务器

#include 
#include 
#include 
#include 
#include 
#include 


int main(void){
	struct sockaddr_in serv,*p;
	memset(&serv,0,sizeof(serv));
	p=&serv;
	p->sin_family=AF_INET;
	p->sin_addr.s_addr=htonl(INADDR_ANY);
	p->sin_port=htons(3000);
	
	int sk=socket(PF_INET,SOCK_STREAM,0);
	if(sk==-1){
		puts("socket error\n");
		exit(1);
	}
	
	int opt=1;
	setsockopt(sk,SOL_SOCKET,SO_REUSEADDR,(void*)&opt,sizeof(opt)); //服务器地址复用
	
	if(bind(sk,(struct sockaddr*)&serv,sizeof(serv))==-1){
		puts("bind error\n");
		exit(1);
	}

	if(listen(sk,10)==-1){
		puts("listen error\n");
		exit(1);
	}
	puts("listening port\n");
	
	while(1){
	    pid_t pid=fork();     //父进程创建子进程
		if(pid==0){
			while(1){
			int ck=accept(sk,NULL,NULL);
			if(ck==-1){
				puts("accept error\n");
				exit(1);
			}
			//-----------------------------------------------------------------
			int t=0;       //发送一个自增数到客户端
			while(1){
				write(ck,&t,sizeof(t));
				sleep(1);       //暂停1秒
				t++;
			}
			}
			
		}else{      //父进程不执行代码,直接跳到accept状态
			 ;
		}
		
	}
	
	return 0;
}

	
	
	
	

.这个程序不完美,它不停地生成新的accept进程,不久,主程序就卡的慢下来了。所以要对新进程数量有一个限制。

 

 

 

 

你可能感兴趣的:(c语言,linux,开发语言)