2017-04-07 5 views
0

ImがC.読む()は、実際のデータ

のリード()関数を使用して問題を有する読む前にジャンクデータを読んでいる私は、ファイルを持っている内容を持っているFILEXを言うことができます:

Data to be outputted 

私は、ファイルを開いて使用し、それに読んだときしかし、私は、読み取り機能が二回実行するように思わ

ssize_t reader = 0; 
ssize_t writer = 0; 
char buffer[256]; 
reader = read(myFile, buffer, 256); 
//check if reader is -1, if so then exit(1) 
writer = write(1, buffer, 256); 
//check if writer is -1, if so then exit(1) 

以下のコードを使用してゴミデータを取得します。一度はゴミデータの束に続いて、ファイル内の実際のデータが続きます。どのようにこれを改善するためのアイデア?

+2

あなたは読んだものだけを書くべきです。 – zzn

+1

あなたのコードフラグメントはMCVE([MCVE])ではな​​く、あなたの主張している動作を提供することができませんでした。あなたの主張を再現する実際のMCVEを提供してください。 (あなたが持っているのは、ファイル内のデータの後にあらゆる種類のゴミを生成します。そして、ゴミがキャリッジリターンを含む場合、部分的に本物のデータをカバーするかもしれません。) –

+0

なぜPOSIXの読み込みを使用するのですか?なぜ標準C freadとfwriteではないのですか? –

答えて

1

あなたのバッファは '\ 0'で満たされ、 '\ 0'で終わっていますか? そして、3番目の引数で256 - inの書き込みを呼び出します。

#include <fcntl.h> 

int main() { 
    const int max_size = 256;  
    char buffer[max_size] = {}; 
    int my_input = open("input", O_TEXT, S_IREAD); 

    ssize_t reader; 
    ssize_t writer; 
    reader = read(my_input, buffer, max_size); 
    if(reader != -1) 
     writer = write(1, buffer, reader); 

    return 0; 
} 
+1

1は、標準出力(STDOUT_FILENO)の標準ファイル記述子番号です。 –

+1

'write(my_output、buffer、max_size);の' max_size'がなぜですか?参照してください[コメント](http://stackoverflow.com/questions/43268891/read-is-reading-junk-data-before-reading-actual-data#comment73606838_43268891) – chux

+0

@chuxああ私は書く必要があります:書き込み(my_output、バッファ、読者)。 – bobra

関連する問題