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

solaris 下调用Posix共享内存函数shm_open,shm_unlink问题。

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

    本文导语:  调用方式如下: shm_open("/aa", O_RDONLY|O_CREATE|O_EXCL ,S_IRUSR | S_IWUSR);在shmOpen.c中 shm_unlink("/aa");在shmClose.c中 以上两个调用分别在不同的文件里,编译生成2个执行文件: shmOpen shmClose 开始调用了很多次都没问题。 由于其...

调用方式如下:
shm_open("/aa", O_RDONLY|O_CREATE|O_EXCL ,S_IRUSR | S_IWUSR);在shmOpen.c中
shm_unlink("/aa");在shmClose.c中

以上两个调用分别在不同的文件里,编译生成2个执行文件:
shmOpen
shmClose

开始调用了很多次都没问题。
由于其它地方错了,重新编译。

这时,调用shmOpen时,进程执行到shm_open函数就停了,等了大概有2分钟,shm_open返回-1的错误码。
此时error = 4 : Interrupted system call

然后我调用shmClose,进程执行到shm_unlink函数就停了,等了大概有2分钟,shm_open返回-1的错误码。
此时error = 4 : Interrupted system call

此时无论调用哪个函数都如上情况。
只要把程序中的"/aa"替换为其它的名称如"/aaa","abc"等等,程序都正常执行
但是再修改成"/aa"重新编译,依然出现如上情况。也就是说"/aa"这个资源名称不能使用了。

用户换成root也是一样。

谢谢解答!!


代码如下:
shmOpen.c
----------------------------------------
#include 
#include 
#include 

extern int errno;

void main()
{
    int i = 0;
    i = shm_open("/aa", O_RDWR|O_CREAT|O_EXCL, S_IRUSR | S_IWUSR);
    if(i != -1)
    {
        printf("creat successn");
    }
    else
    {
        printf("creat failedn");
    }
     printf("error is %d:%sn",errno,strerror(errno));
}
--------------------------------------------------


shmClose.c
---------------------------------------------------
#include 
#include 

extern int errno;

void main()
{
    int i = 0;
    i = shm_unlink("/export_home1_awing_project_nsstest_src_procpid");
    switch(i)
    {
    case 0:
            printf("del successn");
            break;
    case EACCES:
            printf("Permission is denied to unlink the named shared       memory object.n");
            break;
    case ENAMETOOLONG:
            printf("  The length of the name string exceeds  PATH_MAXn");
            break;
    case ENOENT:
            printf("The named shared memory object does not exist.n");
            break;
    default:
            printf("unkonwn reason fail---%dn",i);
            break;
    }
    printf("error is %d:%sn",errno,strerror(errno));
}




|
把/var/tmp/.SHML/aa删掉就可以了。.SHML下的是锁,你的机缘巧合,程序终止时锁没有删除,所以一直被认为是有其他进程正在操作该shm。

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












  • 相关文章推荐
  • solaris下有没有可以取到当前系统时间(微秒级)的函数?
  • solaris中是否有scandir这个函数?急.............
  • solaris下用什么命令看共享库.so中的函数?
  • Solaris系统下函数钩子如何实现!急急急。。。!!
  • 在Solaris上使用Motif开发,有什么函数可以得到当前程序运行的目录?
  • 谁知道solaris对socket的recv和send函数是否是原子操作,谢谢!!
  • solaris 8 下有没有返回系统总物理内存和当前所使用内存大小的函数。(不是top,vmstat命令)
  • sigqueue()函数在solaris 8下用GCC编译时出错
  • 在solaris下如何获得应用程序路径?类似于windows下的GetModuleFileName函数的功能。
  • solaris下检测网口函数
  • solaris上用gcc编译出的动态库老是无法找到导出函数
  • solaris 8上能用gcc for solaris7 或 solaris9的版本吗?
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • 请问Solaris现在最高的版本是多少?Solaris8.0价格如何?Solaris8.0和Red Hat Enterprise Linux AS 3.0有何区别?
  • 请教solaris高手一个solaris安装问题
  • solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • 请问:SOLARIS(for intel)如何装d-link网卡。哪儿下Solaris电子文档。
  • Solaris for X86 和Solaris for Sparc主要区别在哪?
  • 请问Solaris的优势?Solaris下开发相关及系统管理相关资料是否有提供?谢谢
  • telnet 进去的时候我看写着SUN OS5.8,这个是不是Solaris?我找不到Solaris5.8的软件?
  • 没有光碟,怎样从solaris8升级到solaris9?
  • solaris 10能不能远程桌面连接Solaris 10(或 Linux) ,不要安装其他软件
  • 请问高手,在Solaris 8 gcc3.1编译的 *.o 和库文件 *.a ,可以提供在Solaris 7,9下使用吗?
  • 我装了Solaris后,98和2000都找不到了,启动时直接进入Solaris,该怎么办,请高手指点!
  • solaris开发一窍不通,如何开发Solaris下的c程序?
  • 想用Virtual PC虚拟UNIX,求Solaris 10 ,Solaris 10 for x86版或已经设置好的虚拟文件?
  • 怎么修改IP(SOLARIS),怎么在WIN上用EXTRX!X连上SOLARIS
  • solaris 10 下怎么安装jdk-6u5-solaris-i586.sh? ftp上传大文件中断怎么解决?
  • 专门为难solaris高手,之solaris10的修改最大TCP连接数问题
  • solaris root 的shell搞错了,提示 no shell root 进不了!(solaris 8 for x86)


  • 站内导航:


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

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

    浙ICP备11055608号-3