johnnyjyh 2017-06-29 15:13 采纳率: 50%
浏览 2459
已采纳

Linux 的fifo管道利用write 函数如何传递结构体后,正确解析?

linux fifo有名管道 ,可以用来给进程通信,但是write写的时候,发生了不正确的解析,自己整了2天,没搞清楚原因,希望大神来解答一下

写端:

struct msg
{
int id;
char message[255];
};

int main(void)
{
struct msg mym;
mym.id=123;
sprintf(mym.message,"hello china");
int ff=fifo("usr/myfifo",0777);
if(ff<0)
{
perror("fifo fail");
exit(1);
}
int fd=open("usr/myfifo",O_WRONLY);
if(fd<0)
{
perror("open fail");
exit(2);
}
write(fd,&mym,sizeof(mym));

close(fd);



return 0;

}

读端:
struct msg
{
int id;
char message[255];
};

int main(void)
{
struct msg mym;

int fd=open("usr/myfifo",O_RDONLY);
if(fd<0)
{
    perror("open fail");
    exit(2);
}
read(fd,&mym,sizeof(mym));
printf("id=%d,msg:%s",mym.id,mym.message);

unlink("usr/myfifo");
close(fd);



return 0;

}

自己测试 读端msg结构体的对象,能正确读出int成员的值,无法正确读出char*的值,自己不清楚原因。 有种感觉是申请对象内部有脏内存存在,导致解析失败。

  • 写回答

1条回答 默认 最新

  • johnnyjyh 2017-07-14 15:03
    关注

    自己的问题自己找到答案了,struct 内存对齐导致,传递不准确

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 我用C语言easyx图形库绘制了一个3d游戏方框透视,但进入游戏时候鼠标准星对准方框边缘 鼠标光标就会弹出来这是啥情况怎样让光标对准绘制的方框点击鼠标不弹出光标好烦这样
    • ¥20 用Power Query整合的问题
    • ¥20 基于python进行多背包问题的多值编码
    • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
    • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
    • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
    • ¥15 C语言:数据子序列基础版
    • ¥20 powerbulider 导入excel文件,显示不完整
    • ¥15 用keil调试程序保证结果进行led相关闪烁
    • ¥15 paddle训练自己的数据loss降不下去