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

📄 example26.c

📁 LinuxNetProgramming Linux网络编程基础实例
💻 C
字号:
#include	<sys/msg.h>

#include	<sys/ipc.h>

#include	<stdio.h>



#define MAXMESGDATA     1000

#define SVMSG_MODE      777



struct mymesg {

        long        mesg_len;       /* #bytes in mesg_data, can be 0 */

        long        mesg_type;      /* message type, must be > 0 */

        char        mesg_data[MAXMESGDATA];

};



	

size_t

msg_send(int id, struct mymesg *mptr)

{

	        return(msgsnd(id, &(mptr->mesg_type), mptr->mesg_len, 0));

}

/* end mesg_send */

size_t

mesg_recv(int id, struct mymesg *mptr)

{

	        ssize_t n;



		n = msgrcv(id, &(mptr->mesg_type), MAXMESGDATA, mptr->mesg_type, 0);

		mptr->mesg_len = n;             /* return #bytes of data */

		

		return(n);                              /* -1 on error, 0 at EOF, else >0 */

}



int

main()

{

	int		msgid;

	size_t		len;

	ssize_t 	n;

	char		*ptr;

	struct mymesg	mesg;



	msgid = msgget(4321, 0);	/* 打开消息队列 */

	snprintf(mesg.mesg_data, MAXMESGDATA, "%ld", (long)getpid());

	len = strlen(mesg.mesg_data);

	ptr = mesg.mesg_data + len;

	fgets(ptr, MAXMESGDATA - len, stdin); /* 读入路径名 */

	len = strlen(mesg.mesg_data);

	if (mesg.mesg_data[len-1] == '\n')

		len--;

	mesg.mesg_len = len;

	mesg.mesg_type = 1;

	msg_send(msgid, &mesg);				/* 将路径名写入消息队列 */

	mesg.mesg_type = getpid();			/* 以自己的进程号做为消息类型 */

	while((n = mesg_recv(msgid, &mesg)) > 0)		/* 从消息队列中读回服务进程返回的消息*/

		write(stdout, mesg.mesg_data);	/* 将获得的文件内容写到标准输出 */

	exit(0);

}

⌨️ 快捷键说明

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