今天寫一個小程序,需要使用msg在兩個不同程序間進行通信;
兩個程序中msg的文本結構體都是一樣的,直接複製過去的,結果運行的時候出現錯誤:msgrcv: Argument list too long
這個錯誤的原因是 msgrcv 中的參數msglen 小於消息隊列裏要讀取的msg的長度;
msg的結構體是直接複製的,怎麼會出現這樣的問題,只好用sizeof打印一下,結果兩變的大小還真不一樣;
這樣就考慮是字節對齊的問題,msgrcv這邊的程序使用了#pragma pack(4),而msgsnd這邊沒有;
所以在msgsnd 這邊加上 #pragma pack(4),問題解決;
由此可見,最好在寫程序的時候一開始就要定義好字節對齊,以免出現這種看起來沒有問題,但確實有問題的情況;