Linux 下共享内存建立时需要注意的问题
在linux下使用共享内存时,照着书上或者网上的方法,使用shmat函数时,老是会碰到一个问题
提示:
shmat error
permission denied
每次需要sudo一下才能够正常运行,并且如果普通用户使用ipcs查看的话,是看不见已经分配的共享内存的,需要在root用户下才能看见, 最开始以为是shmat需要root用户的权限,后来发现不是这样。
造成这个问题的成因是在使用shget的时候,没有赋于开辟的共享内存对应的读写权限。
shget函数原型如下
int shmget( key_t shmkey , int shmsiz , int flag );
注意最后一个形参 flag,表示当前内存的模式
(mode)以及权限标识。
可以取如下的值
模式可取如下值: 新建:IPC_CREAT
如果标识符以存在,则返回错误值:IPC_EXCL
然后将“模式” 和“权限标识”进行“或”运算,做为第三个参数。
如: IPC_CREAT | IPC_EXCL | 0666
即
shmid = shmget( shmkey , sizeof(in_data) , IPC_CREAT |
0666 ) ;
这样,一切ok. 不需要root权限,用ipcs也能看到当前用户建立的共享内存信息
相关文档:
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);
& ......
…………………………………………总结邮件服务器配置过程(Red Hat Enterprise Linux 4)
Red Hat Enterprise Linux提供了Sendmail和Posfix两种STMP邮件服务软件.
默认情况已经安装Sendmail.如果要使用Postfix,就必须先 ......
一、新建并初始化版本库
1.新建代码仓库
# svnadmin create /home/myrepos
这样,我们就在/home目录下新建了版本库myrepos。
2.初始化代码仓库
#mkdir -p code/{branches,tags,trunk}
按照svn手册上的建议,我们版本库的布局采用branches/tags/trunk这样的三个目录。
然后可以将代码直接拷贝的trunk目录,也可以随后 ......
操作系统要实现多进程,进程调度必不可少。
有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了
实际环境,这些结论是比较片面的。
而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_R ......
red hat linux 下安装 oracle 10g
racle考资料:
Oracle官方网站: http://download.oracle.com/docs/html/B10813_01/toc.htm
一、以root用户登录, 进行如下操作:
1 检查硬件要求
* 主要包括:
********************************************************************
* 内存: & ......