进程通信总结

来源:互联网 发布:数据库毕业论文题目 编辑:程序博客网 时间:2024/06/05 12:50
进程间通信<1>管道:管道是单向的,先进先出的,他把一个进程的输出和一个进程的输入连接在一起 一个进程在管道的尾部写数据,一个进程在管道的头部读数据无名管道:父子进程的通信半双工,有固定的读端和写端int pipe(int fd[2])fd[0]读 fd[1]写 用pipe函数创建使用步骤1 创建一个管道写:先关闭读端 close(fd[0])然后写 write(fd[1],"hello",5)关闭写端 close(fd[1])读:先关闭写端 close(fd[1])然后读 read(fd[0],buf,5)关闭读端 close(fd[0])有名管道:任意进程的通信使用步骤define FIFO "/tmp/myfifo"1 使用mkfifo(FIFO,...)函数创建一个有名管道2 使用fd =open(FIFO,...)打开这个管道3 使用write(fd,buf,100)4 使用read(fd,buf,100)5 close(fd)注意 : 管道只能创建一次 当一个进程执行mkfifo函数是,另一个就只需open就好<2>信号Signal:信号是一种进程间通信机制,他给应用程序提供一种异步的软件中断,使应用程序有机会接收其他程序或终端发送的命令接收到信令后有三种处理方式 忽略SIG_IGN ,默认SIG_DFT , 捕捉(调用相对应的中断服务函数)pause<3>共享内存:使用步骤1 首先使用shmget函数创建一块共享内存2 用shmat函数映射这块共享内存在使用完后用shmdt函数解除地址的映射最后用shmctl函数删除共享内存<4>消息队列:使用步骤1 首先使用ftok函数创建一个建值2 使用msgget函数创建一与上面键值相对应的消息队列描述字可以使用msgsnd函数发一条消息,这个函数可以通过指针写入相应的type值(消息类型)可以使用msgrcv函数从消息队列里获取消息(在成功读取这条消息后,这条消息将从管道移除)<5>信号量主要作用 保护临界资源使用步骤1 创建一个信号量:  通过semget函数创建一个信号灯集2 初始化semval : 通过semctl函数使用SETCAL命令初始化这个值3 获取与释放semval:通过semget函数创建一个信号灯集 semop函数获取(减一)或释放(加一)4 删除信号灯集 :使用semctl函数通过IPC_RMID命令来删除它<6>socket

0 0
原创粉丝点击