さて、私はあなたのプログラムを試してみて、何がうまくいかないのか考えました.
基本的には動作しますが、不具合があります。最初に「あなたの秋」をファイルに書き込むときは、 char
を使用します 4096
の配列 バイトであり、配列全体をファイルに書き込みます。つまり、「あなたの秋」の後に 4088
を書いているということです。 無作為無の文字。後で追加すると、4097 番目以降の位置に追加されます。これはおそらく意図したものではありません。
単に cat
の場合 作成したファイルを見ると、予想される出力 "thy fall, dude" が表示されます。しかし、コード全体を読むと、 4096
しか読んでいません。 文字。したがって、", dude" の部分は読み取られず、プログラムが出力しないのはそのためです。
私の解決策は、配列のサイズを変更する必要があることです。そして、読み取るときは、EOF (read
) に達するまで、たとえば 100 または 1000 のチャンクで読み取ります -1 を返します)。
書き込もうとしているバイト数が正しくありません。
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
その代わりにあなたがすべきこと
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen
if(write (fd, buf, n) < 0){
同様に、他の書き込みおよび読み取りについてもこれを行います。 '\0'
を書いていない場合 ファイルから文字列を終了する場合、ファイルからデータを読み取るときに取得できません。
読み取り中は、ファイル全体が読み取られるまで試してください。 EOF
を取得します .
小さな間違いがあります。sizeof
を変更する必要があります。 関数を strlen
に sizeof
関数は配列のサイズを返しますが、strlen
関数は、配列に格納されている文字列の長さを返すだけです!