GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでO_APPENDモードで開くを使用して、Cでファイルに追加する方法は?

さて、私はあなたのプログラムを試してみて、何がうまくいかないのか考えました.

基本的には動作しますが、不具合があります。最初に「あなたの秋」をファイルに書き込むときは、 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 を変更する必要があります。 関数を strlensizeof 関数は配列のサイズを返しますが、strlen 関数は、配列に格納されている文字列の長さを返すだけです!


Linux
  1. Linuxコマンドを使用して画像にテキストを書き込む方法

  2. Linuxでファイルの終わりにテキストを簡単に追加する方法

  3. Linux で「split」コマンドを使用して iso またはファイルを分割する方法

  1. Linuxでファイルの終わりにテキストを追加する方法

  2. LinuxでCでファイルを書く方法は?

  3. パイプを使用してvimでファイルを開く方法

  1. Pythonでのファイル処理:作成、開く、追加、読み取り、書き込み

  2. 端末を使用して - 破線のファイル名を開く方法は?

  3. cp の代わりに ln を使用して、Linux で開いているが削除されたファイルを復元する方法は?