linux应用之----进程通信
来源:互联网 发布:3个月能学会php吗 编辑:程序博客网 时间:2024/05/19 17:08
进程间通信基础
进程间通信的英文缩写: IPC
为什么需要进程间通信?数据传输,资源共享,通知事件,进程控制等。
Linux进程间通信方式(6种):管道,信号,消息队列,共享内存,信号量,套接字。
各种进程间通信方式详解
1 :管道通信
int pipe (int name[2])
1):成功返回0;失败返回-1;
2):用于父进程与子进程之间的通信。执行了该函数后,相当于打开了两个文件,一个文件描述符为name[0],另一个为name[1];若要往该管道中写入数据,应该关闭name[0];往name[1]中写数据;要从管道读取数据,关闭name[1];从name[0]中读取即可
2 有名管道函数
int mkfifo (const char *path, mode_t mode)
1):表头文件 sys/types.h; sys/stat.h。
2):mode模式。同文件的创建模式。
3):若成功则返回0,否则返回-1。
3 :信号通信
简介:信号通信是unix系统最为古老的通信方式。能产生信号的方法有硬件和
软件两种。硬件诸如:按键,除数为0,访问无效存储空间等。软件产生的信号主要是通过命令或函数。
软件产生信号的方法,最重要的是kill函数和kill命令。另外还有raise函数,alarm函数。
信号的种类非常繁多,并且都是以宏定义的形式呈现,都是一些整形常量。常见的信号:SIGKILL(该信号结束接收该信号的进程),SIGINT(来自键盘的中断信号ctrl+c),SIGSTOP(来自键盘ctrl+z或者调试程序的停止执行信号)。
kill函数: int kill(pid_t pid , int signo)。
raise函数 int raise(int signo)。
Alarm函数 int alarm(unsigned int seconds)。该函数在设定时间后,产生一个SIGALARM信号,如果不捕捉该信号,则默认动作是终止该进程。
pause函数。 Int pause(void)。该函数使调用进程挂起,直至捕捉到一个信号。
信号的处理。调用函数signal。原型不容易理解,直接给出一个例子:
signal(SIGINT, my_func); 此处的myfunc函数时自己定义的一个处理SIGINT信号函数。
4:消息队列通信
简介:unix古老的两种通信方式信号通信和管道通信都有其缺陷。信号通信传输
的信息量有限,而管道通信则只能传送无格式的字节流。消息队列则则克服了上面的缺陷。
头文件:#include <sys/types.h>
#include <sys/ipc.h>
应用举例:首先定义一个数据结构,第一个成员必须是整形,或者长整形。它的作用是把信息做一个标识。写进去的信息如果是用100表示,那么读的时候也必须带上参数100,才能从消息队列中读出这条信息。
struct msg_buf
{
int mtype;
char data[255];
};
key_t ftok(char *pathname , char pro); pro只要不为0即可
msgid=msgget(key,IPC_CREAT|0666);
ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),mtype值,IPC_NOWAIT)
5:信号量
简介:与其它的通信方式不同,信号量主要是用于保护临界资源。进程可以根据它判定是否能够访问某些共享资源。
分类:二值信号灯和计数信号灯。
6:共享内存
产生共享内存: shm_id=shmget(键值, 大小,读写权限) ; 为了防止输入的具体键值可能已经被占用,可以使用宏IPC_PRIVATE。来重新新建一块共享内存,它会自动使用新的键值。键值通常用IPC_PRIVATE. 读写权限用S_IRUSR|S_IWUSR
映射共享内存: 一个具体的例子:
c_addr = shmat(shmid,0,0);
其中shmid是由shmget得到的,第二个0,表示映射到应用程序的共享内存的起始位置。第三个参数不是很明白。
- linux应用之----进程通信
- Linux之进程通信
- Unix/Linux 进程间通信之消息队列应用实例
- linux进程通信之管道
- linux 进程通信之信号
- linux进程通信之信号
- Linux进程通信之信号
- Linux进程通信之信号
- Linux进程通信之信号量
- Linux 进程通信之管道
- linux 进程通信之 信号
- linux 进程通信之 信号量
- Linux进程通信之管道
- linux进程通信之fifo
- linux进程通信之pipe
- Linux之------进程间通信
- Linux之------进程间通信
- Linux之------进程间通信
- linux应用之----进程控制理论
- 编译utf8编码的tex文件使用中文truetype
- 稀疏与冗余表示---初级篇
- CSS 如何让li横向居中显示
- 如何统计数据库中内容类型基本相同的记录,具体看下面需求:
- linux应用之----进程通信
- 安装GC之前需要调整的几个参数
- linux应用之--网络编程
- 黑马程序员-java中生成图形界面
- linux应用之----多线程
- 二维数组的动态分配及参数传递
- ./configure && make && make install详解
- linux下如何创建固定大小的文件
- linux内核编译与内核模块