Linux下进程见通信(IPC)
来源:互联网 发布:免费录音制作软件 编辑:程序博客网 时间:2024/05/04 17:07
UNIX和SystemV进程间通信方式是Linux进程间通信的主要起源。
进程间通信的主要作用有如下几点:
1.数据传输
2.资源共享
3.事件通知
4.进程控制
常用通信方式有:
1.管道(无名和有名管道)
2.信号
3.消息队列
4.共享内存
5.信号量
6.套接字(socket)
无名管道(pipe)
管道,顾名思义即数据流通的载体,就像水管一样。
特点:
1.半双工,数据只能由管道一端流向另一端。
2.父子进程,无名管道只能用于父子进程间通行。
3.无格式数据,数据管道中是比特流的形式,无法传送特定格式的数据。
编程:
1.int pipe(intfildis[2]); //fildis[0]读,fildis[1]写
2.int read(intfd,void*buf,int size_t size);
3.int write(intfd, void*buf,int size_t size);
有名管道(FIFO)
特点:
1.全双共,两进程均可读写管道。
2.可用于任意进程间通信。
3.数据以比特流形式传输。
4.管道中数据读走后,即被清除;
5.所有操作类似于文件操作。
编程:
1.intaccess(const char*filename,int mode);//F_OK
2.intmkfifo(const char *pathname,mode_t mode);//NON_BLOCK|0666
3.int open(constchar*filename,int flgs);
4.int read(intfd,void*buf,size_t size);
5.int write(intfd,void*buf,size_t size);
6.unlink(constchar*filename);
信号(signal)
特点:
1.用于事件通知;
2.信息量少;
编程:
1.int kill(pid_t pid,intsigno); //可向其他进程发射信号
2.int raise(int signo); //父子进程发射信号
3.unsigned int alarm(unsignedint second); //向本进程发射SIGALARM信号;
4.int pause(void); //向本进程发射SIGPAUSE信号,直至接受到信号
5.void (*singal)(intsigno,void(*func)(int))(int);//添加信号处理函数/SIG_IGN/SIG_DEF
消息队列(message queue)
特点:
1.就是一个消息的链表;
2.消息内容以特定结构体形式加入或移除链表;
3.信息量比信号大,数据可以有各种格式,用结构体中数据域标识数据类型;
编程:
1.key_tfotk(const char*filename,char proj); //由文件获取key
2.intmsgget(key_t key,int msgflg); //由key获得msgid,key=IPC_PRIVATE,则创建新队列
3.int msgsnd(intmsgid,struct msgbuf*,int msgsz,int msgflg);
4.int msgrcv(intmsgid,struct msgbuf*,int msgsz,int msgtyp,int msgflg);
5.structmsgbuf
{
};
信号量(semaphore)
特点:
1.实质为维护一个标识资源可用的正整数;
2.访问临界资源前,先获取信号两,整数-1;
3.访问结束时,释放信号量,整数+1;
4.标识资源可用性的整数=0使,申请资源的进程将阻塞或获取失败;
5.主要用于保护临界资源;
6.以信号量集合操作为单位。
编程:
1.key_tftok(const char*filename,char proj);
2.intsemget(key_t key,int nsems,intsemflg);//由key获取包含nsems个信号量的信号量集的semid
3.int semctl(intsemid,int semnum,cmd,...); //控制信号量集合,包括获取/设置semval等,初始化
4.unionsemun
{
};
5.int semop(intsemid,struct sembuf *sops,int nsems);
6.structsembuf
{
};
0 0
- Linux下进程见通信(IPC)
- linux进程通信(ipc)
- linux进程通信(IPC)
- Linux下到IPC(进程间通信方法比较)
- Linux下到IPC(进程间通信方法比较)
- Linux下C编程:进程间通信(IPC)总结
- Linux下的进程通信(IPC)
- Linux下的进程通信(IPC) [转]
- Linux下的进程通信(IPC)
- Linux下的进程间通信(ipc)
- Linux下C编程 进程通信 (IPC)
- Linux下的进程通信(IPC)
- linux 进程通信 IPC
- linux 进程通信 IPC
- Linux进程间通信(IPC)--
- Linux的进程通信(IPC)
- Linux的进程通信(IPC)
- Linux的进程通信(IPC)
- s3c2440 串口驱动和测试程序
- copy_to_user、copy_from_us…
- 基于V4L2编程详解(一)
- 基于V4L2编程详解(二)
- 基于V4L2的视频驱动开发
- Linux下进程见通信(IPC)
- 程序员的终极目标就是干掉程序员
- Django外键的删除
- NYOJ-23 取石子(一)(巴什博奕)
- 黑马程序员---IO包中的其他类(二)
- OSPF: Frequently Asked Questions
- Java数据库链接代码
- 对.Class的一点理解
- VS2010编译错误:fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x