进程通信预备知识.docVIP

  • 4
  • 0
  • 约 11页
  • 2017-01-30 发布于重庆
  • 举报
进程通信预备知识

需要用到的系统调用 实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man 2 系统调用名”或者“man 3 函数名”命令获取。 fork() 创建一个子进程,通过返回值区分是在父进程还是子进程中执行; wait() 等待子进程执行完成; getpid() 获取当前进程id; shmget() 建立一个共享存储区; shmctl() 操纵一个共享存储区; shmat() 把一个共享存储区附接到进程内存空间; shmdt() 把一个已经附接的共享存储区从进程内存空间断开; msgget() 建立一个消息队列; msgctl() 操纵一个消息队列; msgsnd() 发送消息; msgrcv() 接收消息; signal() 设置对信号的处理方式或处理过程; pipe() 打开管道; lockf() 锁定一个文件。 一、管道通信 1.系统调用lockf (fd,mode,size)对指定文件的指定区域(由size指示)进行加锁或解锁,以实现进程的同步与互斥。其中fd是文件描述字;mode是锁定方式,=1表示加锁,=0表示解锁,size是指定文件fd的指定区域,用0表示从当前位置到文件尾。进程管道的通信建立进程间的管道,格式为:pipe(fd); int fd[2]; pipe(fd) 读端fd[0] write(fd[1],buf,size) read(fd[0],buf,size) 3.write()写文件函数,把buf中的长度为size字符的消息送入管道入口fd[1]。 4.read()读文件函数,从管道出口fd[0]读出size字符的消息置入buf中。 5.系统调用sleep(second)用于进程的同步与互斥,自变量是暂停秒数。其功能是使现行进程暂停执行由自变量规定的秒数。 6.sprintf()格式化输出到数组的函数。 7.系统调用exit()和wait()参考课本238页。 二、利用消息机制进行进程间的通信 1、msgget( ) 如果希望创建一个新的消息队列,或者希望存取一个已经存在的消息队列,你可以使用系统调用msgget()。 系统调用:msgget(); 原型:int msgget(key_t key, int msgflg); 返回值:如果成功,返回消息队列标识符 如果失败,则返回-1msgqid=msgget(MSGKEY,0777|IPC_CREAT); 第一个参数是消息队列对象的关键字(key),函数将它与已有的消息队 列对象的关键字进行比较来判断消息队列对象是否已经创建。第二个参数,msgflg 控制的。它可以取下面的几个值: IPC_CREAT : 如果消息队列对象不存在,则创建之,否则则进行打开操作; IPC_EXCL: 和IPC_CREAT 一起使用(用”|”连接),如果消息对象不存在则创建之,否则产生一个 错误并返回。 如果单独使用IPC_CREAT 标志,msgget()函数要么返回一个已经存在的消息队列对象 的标识符,要么返回一个新建立的消息队列对象的标识符。如果将IPC_CREAT 和IPC_EXCL 标志一起使用,msgget()将返回一个新建的消息对象的标识符,或者返回-1 如果消息队列 对象已存在。IPC_EXCL 标志本身并没有太大的意义,但和IPC_CREAT 标志一起使用可 以用来保证所得的消息队列对象是新创建的而不是打开的已有的对象。 除了以上的两个标志以外,在msgflg 标志中还可以有存取权限控制符。这种控制符的 意义和文件系统中的权限控制符是类似的。msgsnd () msgsnd(msgqid,msg,1030,0); msgsnd()函数是用来向消息队列发送消息的。在linux/msg.h 它 的函数定义是这样的: 系统调用: msgsnd() 函数声明: int msgsnd ( int msqid, struct msgbuf *msgp, int msgsz, int msgflg ) 返回值: 0 on success -1 on error 参数解释: 第一个参数msqid 是消息队列对象的标识符(由msgget()函数得到)第二个参数msgp 指向要发送的消息所在的内存第三个参数msgsz 是要发送信息的 长度(字节数),可以用以下的公式计算: msgsz = sizeof(struct mymsgbuf) - sizeof(long); 第四个参数是控制函数行为的标志,可以取以下的值: 0,忽略标志位;msgrcv () msgrcv()函数被用来从消息队列中取出消息。它在linux/msg.h 中的定义是这样的: 系统调用: msgrcv() 函数声明: int

文档评论(0)

1亿VIP精品文档

相关文档