新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 进程间通信之:实验内容

进程间通信之:实验内容

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/257122.htm

(3)编译并运行该程序。

(4)另外打开两个虚拟终端,分别键入“cat>in1”和“cat>in2”,接着在该管道中键入相关内容,并观察结果。

4.结果

运行结果与第6章的例子完全相同。

$./pipe_select(必须先运行主程序)

SELECTCALL

selectcall

TESTPROGRAMME

testprogramme

END

end

q/*在终端上输入’q’或’Q’立刻结束程序运行*/

$cat>in1

SELECTCALL

TESTPROGRAMME

END

$cat>in2

selectcall

testprogramme

end

8.7.2共享内存实验

1.实验目的

通过编写共享内存实验,读者可以进一步了解使用共享内存的具体步骤,同时也进一步加深对共享内存的理解。在本实验中,采用信号量作为同步机制完善两个进程(“生产者”和“消费者”)之间的通信。其功能类似于“消息队列”中的实例,详见8.5.2小节。在实例中使用的与信号量相关的函数,详见8.3.3小节。

2.实验内容

该实现要求利用共享内存实现文件的打开和读写操作。

3.实验步骤

(1)画出流程图。

该实验流程图如图8.10所示。

图8.10实验8.6.2流程图

(2)编写代码。

下面是共享内存缓冲区的数据结构的定义。

/*shm_com.h*/

#includeunistd.h>

#includestdlib.h>

#includestdio.h>

#includestring.h>

#includesys/types.h>

#includesys/ipc.h>

#includesys/shm.h>

#defineSHM_BUFF_SZ2048

structshm_buff

{

intpid;

charbuffer[SHM_BUFF_SZ];

};

以下是“生产者”程序部分。

/*sem_com.h和sem_com.c与“信号量”小节示例中的同名程序相同*/

/*producer.c*/

#includeshm_com.h

#includesem_com.h

#includesignal.h>

intignore_signal(void)

{/*忽略一些信号,免得非法退出程序*/

signal(SIGINT,SIG_IGN);

signal(SIGSTOP,SIG_IGN);

signal(SIGQUIT,SIG_IGN);

return0;

}

intmain()

{

void*shared_memory=NULL;

structshm_buff*shm_buff_inst;

charbuffer[BUFSIZ];

intshmid,semid;

/*定义信号量,用于实现访问共享内存的进程之间的互斥*/

ignore_signal();/*防止程序非正常退出*/

semid=semget(ftok(.,'a'),1,0666|IPC_CREAT);/*创建一个信号量*/

init_sem(semid);/*初始值为1*/

/*创建共享内存*/

shmid=shmget(ftok(.,'b'),sizeof(structshm_buff),0666|IPC_CREAT);

if(shmid==-1)

{

perror(shmgetfailed);

del_sem(semid);

exit(1);

}

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

数字通信相关文章:数字通信原理


通信相关文章:通信原理




评论


相关推荐

技术专区

关闭