共享内存:shmat()调用成功,但未递增nattach

共享内存:shmat()调用成功,但未递增nattach,c,shared-memory,C,Shared Memory,我正在尝试附加一个现有的共享内存段,但nattach值不会增加,如shmat的api所示 我的代码: #include <stdio.h> #include <sys/shm.h> #include <sys/errno.h> void attachSharedMem(char* shm_id) { printf("Attach shared mem ID %s ", shm_id); void* res; res = shmat(

我正在尝试附加一个现有的共享内存段,但nattach值不会增加,如
shmat
的api所示

我的代码:

#include  <stdio.h>
#include <sys/shm.h>
#include <sys/errno.h>

void attachSharedMem(char* shm_id) {
    printf("Attach shared mem ID %s ", shm_id);
    void* res;
    res = shmat(atoi(shm_id), NULL, 0);
    printf("\nAttach result %p", res);
    printf("\nError %d", errno);
}
但是运行
ipcs-m
显示shmid 112590871的
nattach
仍然为0


如果我传递了一个伪shmid,它将返回-1并将errno设置为22,因此使用有效shmid的调用似乎是成功的。连续调用返回不同的地址,因此我认为我正在将段附加到多个位置,但nattach从不递增。

附加shm段的进程仍在运行时,您是否运行了
ipcs-m
?在附加的进程退出后,我运行了
ipcs-m
,但创建共享内存段的进程仍在运行。具体来说,eclipse启动器创建段,nattach=0。当eclipse仍在运行时,我运行C代码来附加该段。我正试图解决这个eclipse错误:然后它就如预期的那样工作:nattach是目前连接了shm段的进程的数量,这不包括过去的连接,这些连接是分离的(通过shmdt显式连接或通过终止进程隐式连接)。当然,我应该意识到这一点。我现在单独测试我的C代码,所以它退出了。在退出之前,我睡了30秒,Nattach递增。我将通过JNI从eclipse RCP插件调用C函数,在这种情况下,nattach计数将根据需要持续到eclipse应用程序退出。当附加shm段的进程仍在运行时,您是否运行了
ipcs-m
?在附加的进程退出后,我运行了
ipcs-m
,但创建共享内存段的进程仍在运行。具体来说,eclipse启动器创建段,nattach=0。当eclipse仍在运行时,我运行C代码来附加该段。我正试图解决这个eclipse错误:然后它就如预期的那样工作:nattach是目前连接了shm段的进程的数量,这不包括过去的连接,这些连接是分离的(通过shmdt显式连接或通过终止进程隐式连接)。当然,我应该意识到这一点。我现在单独测试我的C代码,所以它退出了。在退出之前,我睡了30秒,Nattach递增。我将通过JNI从EclipseRCP插件调用C函数,在这种情况下,nattach计数将根据需要保持,直到eclipse应用程序退出。
Attach shared mem ID 112590871 
Attach result 0x7f63df61e000
Error 0