在c中使用共享内存时,是否可以先创建数据,然后将其附加到共享段(类似于初始化)?还是我必须先创建共享段,然后将数据附加到该共享段?
我确实认为这两种方法都是正确的,但是我不确定在调用shmget
和shmat
期间到底发生了什么。这些调用中的任何一个都会初始化附加的数据吗?
答案 0 :(得分:1)
是否可以先创建数据,然后将其附加到共享段?
否。
还是我必须先创建共享段,然后将数据附加到该共享段?
是的-获得一块内存,然后在其中写入/放置数据。
shmat()为您提供了指向共享段的指针。当您将其分配给程序中的现有指针时,该指针将指向该内存。
这些调用中的任何一个是否初始化附件数据?
创建新的共享内存段时,其中的所有字节都将初始化为零。附加已创建的细分时,您将获得之前放置在该细分中的任何内容。