Linux 字節對齊問題

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

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

這個錯誤的原因是 msgrcv 中的參數msglen 小於消息隊列裏要讀取的msg的長度;

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

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

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


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章