当前位置:  技术问答>linux和unix

有点东西没有想通(关于信号量)

    来源: 互联网  发布时间:2015-05-21

    本文导语:  以下程序是一个建立共享内存,和产生信号量的程序段,请问信号量是多少呢?如果我要建立信号量为3怎么做呢? int *readcount; int semset_id; void opensem(int * sid,key_t key) { if((*sid=semget(key,0,0666))==-1)//从这里看好像信...

以下程序是一个建立共享内存,和产生信号量的程序段,请问信号量是多少呢?如果我要建立信号量为3怎么做呢?
int *readcount;
int semset_id;

void opensem(int * sid,key_t key)
{
if((*sid=semget(key,0,0666))==-1)//从这里看好像信号量应该是零吧?key在这里有什么用呢?0666又是什么呢?
{ printf("semaphore set does not existn");
exit(1);
};
}
int * openshm(int n,int size)
{
key_t key;
int shmid,cntr;
char *segptr;
key=ftok(".",'s')+n;
if((shmid=shmget(key,size,0))==-1)
{ perror("shmget");
exit(1);
}
if((segptr=shmat(shmid,0,0))==-1)
{ perror("shmat");
exit(1);
}
return((int*) segptr);
}

key=ftok(".",'s');//请解释一下这个函数,key是什么?有什么用,看帮助看了半天还是没有看懂
opensem(&semset_id,key);
readcount=(int*)openshm(1,100);


完整的程序的运行结果是:“semaphore set does not exist”为什么会失败呢?
最近要考试了,今天看了看书问题多多啊~~,请大家帮帮忙吧,鞠躬!

|
推荐使用POSIX信号灯sem_open/sem_close/sem_wait等。具体的看man或者看UNP第二卷。

ftok是根据path生成一个key,相同的path和id会生成相同的key。key用来获取semaphore。
semget(key,0,0666)的nsems不能为0。0666是访问权限。

|
union semun
{int val;
struct semid_ds *buf;
unsigned short int *array;
};
union semun semopts;
main(){
int semid;
semid=semget(100,1,IPC_CREAT|0666);
semopts.val=3; semctl(semid,0,SETVAL,semopts);/*建立信号量为3*/
}

|
使用windows的API吧,CreateSemaphore等函数,具体的请查MSDN

|
key相当与一个系统全局量,用于不同进程间通信!

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • rh9下把WIN分区的东西MOUNT过去但是做WIN分区的东西没有权限进行操作?怎么办
  • 大家好,公司在sun solaris上开发系统,而我以前没有接触过类似的东西有什么好东西能不能共享一下
  • coLinux下怎么出现图形界面?没有象Xwindow这样的东西,java写的JPanel这些东西可以图形显示吗?
  • 哪位大哥大姐知道IAS是东西?有没有详细的中文资料?
  • unix下有没有像window 下的dll一类的东西?来实现程序的封装。
  • java 在Unix下有没有类似于Windows SDK的东西
  • 为什么我的/PROC目录下没有任何东西呢
  • XR11是什么东西,是不是没有它有些程序无法编译成功!
  • 有没有类似Pro*Java的东西
  • .net/c#/asp.net iis7站长之家
  • 请问linux下有没有类似于windows perfmon用来监测系统性能的东西?
  • 在rd7.2中好象已经没有inetd.conf文件了 不知道用什么东西代替了?
  • linux 服务器,每周神秘死机,这个怎么查?有没有类似于crash report之类的东西?看过System Log了没有可以参考的地方,只是在某段时间没记录
  • 删除了东西,硬盘没有空出来,求助!
  • applet 里用system.out.print()怎样才能看到输出的东西,console没有出来阿!
  • 为什么明明/etc下面只有sysconfig这个目录,而没有sysconfig这个文件,但是vi sysconfig这个命令却能编辑到东西?
  • jsp有没有检查语法错误的东西,难道只能在改完了在服务器上运行然后才能找到错误吗?
  • 想报考软件工程硕士,不知道程序员哥们们认为这个东西怎么样?有没有真正的含金量??
  • servlet 的init()方法都有什么用?没有东西要初始化的时候也要写上吗?
  • java里有没有象vc里的sleep(1000)一样的功能的东西 当然不是实现Runnable不是继承线程类
  • vfat和windows下的fat32是一个东西还是两个东西?
  • 怎样监测我的机器通过网卡都发送了什么东西?而不是像sniffer等检测收到了什么东西?
  • 为什么我的JB5.0的企业版很多东西没法用,比如EJB,CORBA,是不是要装什么东西???
  • 想深入学习Java应该学习哪些东西
  • SCJD是什么东西,在线等待。
  • JTS,EJB,JavaBean,JDBC,JMSF都是些什么东西?
  • 大家说说,这个东西能值多少钱?
  • 请问怎么样实现这种东西,很急!谢谢
  • Java可以调用Win32API和COM的东西吗?-netix
  • itimer是什么东西?
  • ??? 在win98下看linux下的东西用什么软件? ???


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3