возможно ли сначала создать данные, а затем присоединить их к общему сегменту?
Нет.
Или я должен сначала создать общий сегмента потом прикрепить к нему данные?
Да - вы получаете часть памяти, затем записываете / помещаете в нее данные.
shmat () дает вам указатель на разделяемый сегмент.Когда вы присваиваете его существующему указателю в вашей программе, этот указатель указывает на этот фрагмент памяти.
Выполняет ли какой-либо из этих вызовов инициализацию прикрепленных данных?
При создании нового сегмента совместно используемой памяти все байты в нем будут инициализированы нулем.Прикрепляя уже созданный сегмент, вы получаете все, что ранее поместили в этот сегмент.