⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prg6_7server.c

📁 配套光盘网络编程进程间的通信,网络编程进程间的通信是一本很经典的好书
💻 C
字号:
#include <sys/msg.h>
#include <stdlib.h>
#include <sys/types.h>
#include "svmsg.h"
#include <errno.h>
#include <unistd.h>
#include <stdio.h>

int  server(int,int);
int main(int argc,char **argv)
{
	int readid,writeid;
	readid = msgget(MQ_KEY1,SVMSG_MODE | IPC_CREAT);
	writeid = msgget(MQ_KEY2,SVMSG_MODE | IPC_CREAT);
	server(readid,writeid);
	exit(0);
}

size_t mesg_send(int id,mymesg *mptr)
{
	return (msgsnd(id,&(mptr->mesg_type),mptr->mesg_len,0));
}

size_t mesg_recv(int id,mymesg *mptr)
{
	size_t n;
	n = msgrcv(id,&(mptr->mesg_type),MAXMESGDATA,mptr->mesg_type,0);
	mptr->mesg_len = n;
	return (n);
}

int server(int readfd,int writefd)
{
	FILE  *fp;
	size_t  n;
	mymesg  mesg;
	mesg.mesg_type = 1;
	if (( n = mesg_recv(readfd,&mesg)) == 0)
	{
		perror("pathname missging");
		return(0);
	}
	
	mesg.mesg_data[n] = '\0';
	if ((fp = fopen(mesg.mesg_data,"r")) == NULL)
	{
		snprintf(mesg.mesg_data+n,sizeof(mesg.mesg_data) - n,
			":can't open,%s\n",strerror(errno));
		mesg.mesg_len = strlen(mesg.mesg_data);
		mesg_send(writefd,&mesg);
	}
	else
	{
		while(fgets(mesg.mesg_data,MAXMESGDATA,fp) != NULL)
		{
			mesg.mesg_len = strlen(mesg.mesg_data);
			mesg_send(writefd,&mesg);
		}
		fclose(fp);
	}
	
	mesg.mesg_len = 0;
	mesg_send(writefd,&mesg);
}
		
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -