当前位置: 技术问答>linux和unix
fork 创建进程,共享内存,文件描述符问题
来源: 互联网 发布时间:2016-11-29
本文导语: 程序如下:server程序 #include #include #include #include #include int serverfd; struct sockaddr_in addr={}; int r; int *cfd;//存放连接的客户的fd int idx=0;//存放客户的个数。 char buf[255]={}; main() { cfd=mmap(0,10*sizeof(int), PROT_WRITE|PRO...
程序如下:server程序
#include
#include
#include
#include
#include
int serverfd;
struct sockaddr_in addr={};
int r;
int *cfd;//存放连接的客户的fd
int idx=0;//存放客户的个数。
char buf[255]={};
main()
{
cfd=mmap(0,10*sizeof(int),
PROT_WRITE|PROT_READ,MAP_ANONYMOUS|MAP_SHARED,0,0);
//1.建立服务器socket,绑定地址,监听
serverfd=socket(AF_INET,SOCK_STREAM,0);
if(serverfd==-1) printf("socket:%mn"),exit(-1);
printf("服务器socket创建成功n");
addr.sin_family=AF_INET;
addr.sin_port=htons(22222);
addr.sin_addr.s_addr=inet_addr("192.168.180.47");
r=bind(serverfd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("bind:%mn"),exit(-1);
printf("服务器地址绑定成功n");
r=listen(serverfd,10);
if(r==-1) printf("listen:%mn"),exit(-1);
printf("服务器监听启动!n");
//2.接受客户连接,并且创建子进程
while(1)
{
printf("接受客户连接中.....n");
cfd[idx]=accept(serverfd,0,0);
printf("有人连接上来!n");
if(fork())
{
idx++;
continue;
}
else
{
//3.子进程负责接受客户的数据,并且广播
printf("客户进程启动!%dn",cfd[idx]);
while(1)
{
int i=0;
//接受客户的数据
bzero(buf,255);
r=recv(cfd[idx],buf,255,0);
if(r
#include
#include
#include
#include
#include
int serverfd;
struct sockaddr_in addr={};
int r;
int *cfd;//存放连接的客户的fd
int idx=0;//存放客户的个数。
char buf[255]={};
main()
{
cfd=mmap(0,10*sizeof(int),
PROT_WRITE|PROT_READ,MAP_ANONYMOUS|MAP_SHARED,0,0);
//1.建立服务器socket,绑定地址,监听
serverfd=socket(AF_INET,SOCK_STREAM,0);
if(serverfd==-1) printf("socket:%mn"),exit(-1);
printf("服务器socket创建成功n");
addr.sin_family=AF_INET;
addr.sin_port=htons(22222);
addr.sin_addr.s_addr=inet_addr("192.168.180.47");
r=bind(serverfd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("bind:%mn"),exit(-1);
printf("服务器地址绑定成功n");
r=listen(serverfd,10);
if(r==-1) printf("listen:%mn"),exit(-1);
printf("服务器监听启动!n");
//2.接受客户连接,并且创建子进程
while(1)
{
printf("接受客户连接中.....n");
cfd[idx]=accept(serverfd,0,0);
printf("有人连接上来!n");
if(fork())
{
idx++;
continue;
}
else
{
//3.子进程负责接受客户的数据,并且广播
printf("客户进程启动!%dn",cfd[idx]);
while(1)
{
int i=0;
//接受客户的数据
bzero(buf,255);
r=recv(cfd[idx],buf,255,0);
if(r