如何从共享内存中分离字符串数组? C

时间:2012-11-09 04:35:21

标签: c arrays ipc shared-memory detach

我有:

int array_id;
char* records[10];

// get the shared segment
if ((array_id = shmget(IPC_PRIVATE, 1, 0666)) == -1) {
            perror("Array Creating");
}

// attach
records[0] = (char*) shmat(array_id, (void*)0, 0);
if ((int) *records == -1) {
     perror("Array Attachment");
}

工作正常,但当我尝试分离时,我得到一个“无效参数”错误。

// detach
int error;
if( (error = shmdt((void*) records[0])) == -1) {
      perror(array detachment);   
}

任何想法?谢谢

2 个答案:

答案 0 :(得分:1)

shmdt()中,无需将指针参数转换为void*,它将自动处理此问题。

(void*)移除shmdt((void*) records[0]))。它应该是这样的。

if ((error = shmdt(records[0]) ) == -1)
{
  perror("Array detachment");
}

它会起作用。

同样在shmat(),如果出错,则会返回(void*) -1,因此您的比较会发出警告。 所以这样做

if ((char *)records[0] == (void *)-1)
{
  perror("Array Attachment");
}

答案 1 :(得分:1)

假设附件顺利进行,invalid argument只是意味着该段已经分离,或者records[0]的值已经更改,因为它是通过附加设置的。