将ASCII字节流发送到管道

时间:2013-04-11 09:04:57

标签: c shell ascii echo

我在C程序的/ tmp / mypipe中创建了一个管道。管道用于在程序中的两个模块上发送和接收命令字节。模块发送以下结构中指定的数据:

struct controller
{
  int command;
  char data[100];
}

我想以相同的格式将数据发送到/ tmp / mypipe。我尝试了下面的命令,C程序接收数据。

echo -e "\x00\x00\x00\x04"www.google.com > /tmp/mypipe

但是,程序收到的数据格式如下:

control.command = 67108864
control.data = www.google.com

我想要的是control.command仅以4号收到。我尝试了多个通过谷歌找到的建议。但是,当我尝试将数据重定向到管道时,它会失败。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您最有可能使用小端机,因此您应该以小端显示数字

echo -e "\x04\x00\x00\x00"www.google.com > /tmp/mypipe

或者,最好在界面的合同中选择一个字节顺序,并确保将其转换为代码中机器的字节顺序

NAME
htonl, htons, ntohl, ntohs - convert values between host and network byte order  

SYNOPSIS
#include <netinet/in.h>

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);
  

说明

     

htonl()函数转换无符号整数   hostlong从主机字节顺序到网络字节顺序。

     

htons()函数转换无符号短整数hostshort   从主机字节顺序到网络字节顺序。

     

ntohl()函数从中转换无符号整数netlong   网络字节顺序为主机字节顺序。

     

ntohs()函数转换无符号短整数netshort   网络字节顺序为主机字节顺序。

     

在i80x86上,主机字节顺序首先是最低有效字节,   而在因特网上使用的网络字节顺序是Most   重要的字节首先。

答案 1 :(得分:1)

这是一个大/小端的问题。

在您的系统上,您应该使用:

echo -e "\x04\x00\x00\x00"www.google.com > /tmp/mypipe