1. 程式人生 > >Linux 位元組對齊問題

Linux 位元組對齊問題

今天寫一個小程式,需要使用msg在兩個不同程式間進行通訊;

兩個程式中msg的文字結構體都是一樣的,直接複製過去的,結果執行的時候出現錯誤:msgrcv: Argument list too long

這個錯誤的原因是 msgrcv 中的引數msglen 小於訊息佇列裡要讀取的msg的長度;

msg的結構體是直接複製的,怎麼會出現這樣的問題,只好用sizeof列印一下,結果兩變的大小還真不一樣;

這樣就考慮是位元組對齊的問題,msgrcv這邊的程式使用了#pragma pack(4),而msgsnd這邊沒有;

所以在msgsnd 這邊加上 #pragma pack(4),問題解決;

由此可見,最好在寫程式的時候一開始就要定義好位元組對齊,以免出現這種看起來沒有問題,但確實有問題的情況;