2013-04-11 126 views
0

我在C程序的/ tmp/mypipe中創建了一個管道。該管道用於通過程序中的兩個模塊發送和接收命令字節。將ASCII字節流發送到管道

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 

我想是要接收作爲單純的4號。我試過多次建議,control.command我通過谷歌找到的。但是,當我嘗試將數據重定向到管道時,它會失敗。

任何幫助將不勝感激。

回答

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()函數將主機字節順序的無符號短整數主機短小 轉換爲網絡字節順序。

ntohl()函數將無符號整數netlong從 網絡字節順序轉換爲主機字節順序。

ntohs()函數將無符號短整數netshort從 網絡字節順序轉換爲主機字節順序。

在i80x86上,主機字節順序爲最低有效字節, ,而互聯網上使用的網絡字節順序大多數爲 重要字節。

1

這是一個大/小端的問題。

在你的系統,你應該使用:

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

太好了。有用。謝謝。 – Alexander 2013-04-11 09:13:07