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 ......
一、 jdk的安装
1. 下载jdk: 从www.sun.com下载jdk( jdk-1_5_0_20-linux-i586-rpm.bin ),下载后使用ssh上传到linux系统的home目录下,当然也可以放在其它目录。
2. 进入安装目录,修改jdk的使用权限,给所有用户添加可执行的权限:
#cd /home
#chmod +x jdk-1_5_0_20-linux-i586.rpm.bin ......
原文地址:http://lhsblog01.blog.163.com/blog/static/1020045192010221104237126/
GPIO是与硬件体系密切相关的,linux提供一个模型来让驱动统一处理GPIO,即各个板卡都有实现自己的gpio_chip控制模块:request, free, input,output, get,set,i ......
如何开启关闭linux防火墙
重启后生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
或
关闭: /etc/rc.d/init.d/iptables stop
启动: /etc/rc.d/init.d/ip ......
最近在看一个开源的代码,一段代码看了很久都没有看懂,Google了一下,尽然是linux中链表的遍历。
遍历链表:
遍历链表list_for_each是一个宏,展开了就是一个for循环
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != ( ......