不只是sem.h,很多头文件都有/usr/include/linux和/usr/include/sys两个版本。
我的印象是:linux目录里面的头文件用于内核,
sys目录里面的头文件用于应用程序或者glibc标准库
如果我的回答没能帮助您,请继续追问。
信号量在进程是以有名信号量进行通信的,在线程是以无名信号进行通信的,因为线程linux还没有实现进程间的通信,所以在sem_init的第二个参数要为0,而且在多线程间的同步是可以通过有名信号量也可通过无名信号,但是一般情况线程的同步是无名信号量,无名信号量使用简单,而且sem_t存储在进程空间中,有名信号量必须LINUX内核管理,由内核结构struct ipc_ids 存储,是随内核持续的,系统关闭,信号量则删除,当然也可以显示删除,通过系统调用删除,消息队列,信号量,内存共享,这几个都是一样的原理。,只不过信号量分为有名与无名
无名使用 <semaphore.h>,
有名信号量<sys/sem.h>
无名信号量不能用进程间通信,
//无名与有名的区别,有名需要KEY值与IPC标识
所以sem_init的第二个参数必须为0,,,,
在linux下,其实不用选择gb2312,我都用的是utf8,当然也需要按照以上步骤进行设置,肯定不会出现乱码!个人喜好,大家随意!之前我试了很多方法,比如在/etc/sysconfig/i18n文件中改系统字体,在/etc/my.cnf中[mysqld]字段后加入如下语句default-character-set=gb2312等等,我觉得没有必要。
以上步骤看似很简单,但是我的失败教训,也是我的成功心得。现在与大家分享,看后有收获的,不顶一下就是你的不厚道了!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)