📄 example26.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 + -