prg6_7server.c
来自「配套光盘网络编程进程间的通信,网络编程进程间的通信是一本很经典的好书」· C语言 代码 · 共 67 行
C
67 行
#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 + =
减小字号Ctrl + -
显示快捷键?