0

しなければならないのですか?私はいつもこの種のものについて曖昧でしたが、次のようなものがある場合:

char buf[256];
read(fd, buf, 256);

write(fd2, buf, 256);

これらの関数が -1 を返す場合を除いて、ここでエラーの可能性はありますか?

40 文字しか読み取れない場合、その後に \0 を付けますか? (そして、書き込みは \0 を認識して停止しますか? また、256 文字を読み取る場合、その 256 文字の後に \0 はありますか?

4

4 に答える 4

1

マニュアルページから:

Synopsis

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

つまりvoid *、ではなく、文字ではなくバイトを読み取るchar *ためです。read()他の値と同様にゼロバイトを読み取ります。バイトのブロック (文字列とは対照的に) は終了していないため、終了read()しません。

于 2015-06-10T14:05:26.617 に答える
0

しなければならないのですか?

ファイルから正常に読み取られたデータに'\0'...が含まれていない限り、そうではありません。

これらの関数が -1 を返す場合を除いて、ここでエラーの可能性はありますか?

はい。read読み込まれた実際のバイト数 (または失敗を示す負の値) を返します。write他のファイルにそのバイト数を超えることを選択した場合、潜在的なゴミを書き込んでいます。

于 2015-06-10T14:57:35.450 に答える