linux 进程实验报告,实验二进程通信 Linux实验报告

《实验二进程通信 Linux实验报告》由会员分享,可在线阅读,更多相关《实验二进程通信 Linux实验报告(9页珍藏版)》请在人人文库网上搜索。

1、实验报告学号_____ 姓名____ ___ 成绩 实验二 进程通信 【实验目的和要求】1、了解进程通信的概念及方法;2、了解信号量、管道;3、掌握信号量、管道和命名管道编程方法。【实验内容】1、利用命名管道实现单机QQ聊天;2、撰写实验报告;【实验原理】1、信号量(semaphore)是为那些访问相同资源的进程以及同一进程不同线程之间提供的一个同步机制。它不是用于传输数据,而只是简单地协调对共享资源的访问。信号量包含一个计数器,表示某个资源正在被访问和访问的次数,用来控制多进程对共享数据的访问。一旦成功拥有了一个信号量,对它所能做的操作只有两种:请求和释放。当执行释放操作时,系统将该信号值减。

2、1(如果小于零,则设置为零);当执行请求操作时,系统将该信号值加1,如果加1后的值大于设定的最大值,那么系统将会挂起处理进程,直到信号值小于最大值为止。Tuxedo用信号量来确保在某一时刻只有一个进程对某一块共享内存进程访问。信号量配置太低会导致Tuxedo系统应用程序无法启动。2、管道分为两种:管道和命名管道。管道是UNIX系统IPC的最古老形式,并且所有的UNIX系统都提供这种通信机制。可以在有亲缘关系(父子进程或者是兄弟进程之间)进行通信,管道的数据只能单向流动,如果想双向流动,必须创建两个管道。管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信。后来以管道为基础提出命名。

3、管道(named pipe,FIFO)的概念,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(first in first out)规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。【程序代码】1、lucy.c#include#。

4、include#include#include#include#include#include#includechar write_fifo_name=ltop_fifo;char read_fifo_name=ptol_fifo;char writer=Lucy;char reader=Peter;int main(int argc,char *argv)int write_fd,read_fd;mkfifo(write_fifo_name,S_IRUSR|S_IWUSR);mkfifo(read_fifo_name,S_IRUSR|S_IWUSR);printf(hello,I am lu。

5、cy!n);write_fd=open(write_fifo_name,O_WRONLY);if(write_fd#include#include#include#include#include#include#includechar write_fifo_name=ptol_fifo;char read_fifo_name=ltop_fifo;char writer=Peter;char reader=Lucy;int main(int argc,char *argv)int write_fd,read_fd;mkfifo(write_fifo_name,S_IRUSR|S_IWUSR);m。

6、kfifo(read_fifo_name,S_IRUSR|S_IWUSR);printf(hello,I am peter!n);read_fd=open(read_fifo_name,O_RDONLY);if(read_fd#include 函数原型int mkfifo(const char * pathname, mode_t mode)函数传入值Pathname:要创建的的管道Mode:设置管道权限函数返回值若成功则为0,若出错返回-1FIFO相关出错信息:EACCES(无存取权限)EEXIST(指定文件不存在)ENAMETOOLONG(路径名太长)ENOENT(包含的目录不存在)ENO。

7、SPC(文件系统余空间不足)ENOTDIR(文件路径无效)EROFS(指定的文件存在于只读文件系统中)3、信号发送和捕捉信号发送:kill()和raise()kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组,它不仅可以中止进程(实际上发出SIGKILL信号),也可以向进程发送其他信号。kill()函数语法:头文件#include #include 函数原型int kill(pid_t pid,int sig)函数传入值Pid:正数:要发送信号的进程号0:信号被发送到所有的当前进程在同一进程组的进程-1:信号发给所有的进程表中的进程-1:信号发给进程组号为-pid的每一个进程Sig:信号函数返回值若成功则为0,若出错返回-1。4、fflush(stdout)目的是清空缓冲,强制结果马上显示到屏幕上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值