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);
相关文档:
1. I/O Port
和硬件
打交道离不开I/O Port
,老的
ISA
设备经常是占用实际的
I/O
端口,在
linux
下,操作
系统没有对
I/O
口屏蔽,也就是说,任何驱动程序都可对任意的
I/O
口操作,这样
就很容易引起混乱。每个驱动程序应该自己避免误用端口。
有两个
重要的kernel
函数 ......
Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。
与一些技巧相比,Configure显得基础一 ......
groups 查看当前登录用户的组内成员
groups gliethttp 查看gliethttp用户所在的组,以及组内成员
whoami 查看当前登录用户名
/etc/group文件包含所有组
/etc/shadow和/etc/passwd系统存在的所有用户名
添加用户abc到root群组:
gpasswd -a abc root ......
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理 解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.
图 形界面并不是 ......