进程通信的系统调用很常用
进程通信的系统调用
•pipe系统调用
格式: int pipe (filedes)
int filedes [2];
•消息机制
•Msgid=msgget(key,msgflg)
key_t key;
int msgflg;
•Msgctl(msgid, cmd, buf)
int msgid, cmd;
msgqid_ds #buf;
•msgsnd(msgid, msgp, msgsz, msgflg)
int msgid;
struct msgbuf *msgp;
int msgsz, msgflg;
•msgrcv (msgid, msgp, msgsz, msgtyp, msgflg );
int msgid;
struct msgbuf *msgp;
int msgsz;
long msgtyp;
int msgflg;
管道通信程序#include <stdio.h>
#include <fcntl.h>
char parent[]={“A message from parent .”};
char child[]={“A message from child .”};
main()
{int chan1[2],chan2[2];
char buf[100];
if (pipe(chan1)==-1 || pipe(chan2)==-1) errexit(“pipe”);
if (fork())
{close(chan1[0]); close(chan2[1]);
write(chan1[1],parent,sizeof parent);
close(chan1[1]);
read(chan2[0],buf,100);
printf(“parent process : %s \n”,buf);
close(chan2[0]);
}
else
{close(chan1[1]); close(chan2[0]);
read(chan1[0],buf,100);
printf(“child process : %s \n”,buf);
write(chan2[1],child,sizeof child);
close(chan2[1]); close(chan1[0]);
}
}
5. 实验题:
用C语言编制一个使用进程控制和进程通信类系统调用的程序。
编辑工具: X-windows gedit全屏幕编辑程序。
vi
编译命令: $gcc ^^^.c -o ***
(源程序名) (可执行文件名)
或 $gcc ^^^.c
默认可执行文件为 a.out
执行 $ . /a.out
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。