2016-05-07 9 views
1

現在、システムコール(open()、write()、read()などを使用してファイルをバイナリファイルに複製する必要があるプログラムを作成中です。 ...)。これまでのところこれがあります。Cでシステムコールを使ってファイルをバイナリファイルにコピーして変換する

void copyFileToFD(int destinationFD, int sourceFD){ 
    unsigned char b[64]; 
    int amountRead = -1; 
    while((amountRead = read(sourceFD, &b, 64)) > 0){ 
     int written = write(destinationFD, &b, amountRead); 
    } 
} 

私が今行っている問題は、テキストファイルです。

ファイルは、このテキストを持っているとします

これは、いくつかのテキスト12345678

私の現在の出力ファイルが

これは、いくつかのテキスト12345678

であるを示しています私の希望する出力ファイル()

ABCD EF00 0000 0000 0000 0000 ...

すべてのファイルがバイナリファイルとしてコピーされるように、どのように私は私のコードを変更することができ

私は(関数freadの承知しています)とfwrite()はこれをシステムコールでどのように行うことができるかを知りたい。

ありがとうございました。

+2

「バイナリファイル」という奇妙な定義があります。 「ABCD EF00 0000 0000 0000 0000」はどこから来たのですか?あなたは "5468 6973 2069 7320 736f 6d65 2074 6578 7420 3132 3334 3536 3738"の意味ですか? –

+0

私のエディタは、バイナリファイルをそのような形式で表す方法でオープンします。 "XXXX XXXX XXXX XXXX ..."たぶん私は、バイナリファイルが実際に何であるかについてちょっと混乱しています。 –

+4

14バイト "48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a"を含むバイナリファイルがある場合、14バイト "48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a"を含みます。 "Hello、world!\ n"の14文字を含むテキストファイルがある場合、14バイト "48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21 0a"が含まれています。現代のオペレーティングシステムでは、 "テキスト"と "バイナリ"ファイルの区別は、主に解釈の1つです。 –

答えて

0

入力を16進テキスト出力に変換したいようです。 printf()

void copyFileToFD(int destinationFD, int sourceFD){ 
    unsigned char ch; 
    ssize_t amountRead = -1; 
    while((amountRead = read(sourceFD, &ch, sizeof(ch))) > 0){ 
     dprintf(destinationFD, "%.2x ", ch); 
    } 
} 
関連する問題