Linux信号量 共享内存和消息队列
Linux信号量 共享内存和消息队列
1. 信号量
使用信号量可以实现进程间同步。主要函数定义:
#include <sys/sem.h>
int semctl(int sem_id, int sem_num, int command, …);
int semget(key_t key, int num_sems, int sem_flags);
int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
semget函数根据提供的key生成信号量标识符;
semctl函数初始化或者删除信号量标识符;
semop函数改变信号量大小
2. 共享内存
共享内存机制使得两个不相关进程可以读取和修改同一段内存从而实现数据共享。主要函数定义:
#include <sys/shm.h>
void *shmat(int shm_id, const void *shm_addr, int shmflg);
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
int shmdt(const void *shm_addr);
int shmget(key_t key, size_t size, int shmflag);
shmget函数根据key生成有效的共享内存段名,根据参数size产生共享的内存容量。
shmat函数将创建的共享内存段连接到一个进程的内存空间中,这样才可以使用该段内存。
shmdt函数将共享内存从当前内存中分离。
shmctl函数可以删除共享内存段。
3. 消息队列
消息队列和命名管道非常类似,但少了打开和关闭管道的复杂性。主要函数如下:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
int msgget(key_t key, int msgflg);
int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);
int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg);
相关文档:
准备工作
qt-everywhere-opensource-src-4.6.2.tar
解压 tar xvzf qt-everywhere-opensource-src-4.6.2.tar
配置:
./configure -prefix /home/hyk/Qt_self_compiled/Qt_4_6_2
(只是改变了安装目录)
gmake
(重配置 gmake confclean , configure)
中午12 ......
linux设备驱动开发详解——globalmem
收藏
常见的两种错误:
1.在插入模块的时候出现如下问题:
# insmod globalmem.ko insmod: error inserting 'globalmem.ko': -1
Device or res ......
1.增加硬件
增加的ide硬盘前缀为hd,scsi硬盘前缀为sd;第一块硬盘为hda或sda,第二块硬盘为hdb或sdb,以此类推。
2.用pvcreate创建physical volumn
pvcreate /dev/sdb1 /dev/sdb2
此处所用的分区是第二步中操作的类型为8e的分区,pvcreate的参数可以为1个或多个;创建完成后可以用pvdisplay -v来查看创建的情况,用pvre ......
wine 一个1.1版本的搜狗浏览器:
$ ln -s
文件夹路径/SogouExplorer/ .wine/drive_c/Program\ Files/SogouExplorer
$ wine "C:\Program
Files\SogouExplorer\SogouExplorer.exe" -proxy
PID:8
PORT:8081
CPORT:8082
PAC:http://127.0.0.1:8082/proxy.pac?t=1349
RET:SUCCESS
即
可在 Fi ......