c - 调用shmget或shmat会初始化数据吗?

在c中使用共享内存时,是否可以先创建数据,然后将其附加到共享段(类似于初始化)?或者必须先创建共享段,然后将数据附加到它?
我确实认为这两种方法都是正确的,但我不确定在调用shmgetshmat时到底发生了什么。这些调用中有没有初始化附加数据?

最佳答案

是否可以先创建数据,然后将其附加到共享段?
不。
或者必须先创建共享段,然后将数据附加到它?
是的-你得到一块内存,然后在其中写入/放置数据。
shmat()给您一个指向共享段的指针。当你把它分配给你的程序中的一个现有的指针时,那个指针指向这个内存块。
这些调用中有没有初始化附加数据?
创建新的共享内存段时,其中的所有字节都将初始化为零。当附加一个已经创建的段时,您将获得之前放置在该段中的任何内容。