0
私はファイルを書き終えた後にたくさんのガベージ文字を書いていますが、それは私が欲しいものではありません。ファイルの読み込みが終了したらどうすれば終了できますか?write(2)ファイルを書き終えた後にガーベジ文字を書き込む
#include <cstdlib>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <iostream>
using std::cerr;
using std::endl;
const int BUFF_SIZE = 4096;
int main (int argc, char* argv[]) {
if (argc < 2) {
cerr << "Usage:\t./cat FILE ..." << endl;
return EXIT_FAILURE;
} // if
for (int i = 1; i < argc; ++i) {
int fd;
if ((fd = open(argv[i], O_RDONLY)) == -1) {
perror(argv[i]);
return EXIT_FAILURE;
} // if
char buf [BUFF_SIZE];
int r;
while ((r = read(fd, buf, BUFF_SIZE-1)) > 0) {
buf[BUFF_SIZE-1] = '\0';
if ((write(STDOUT_FILENO, buf, BUFF_SIZE)) == -1) { // the offending line
perror(argv[i]);
return EXIT_FAILURE;
} // if
} // while
if (r < 0) {
perror(argv[i]);
return EXIT_FAILURE;
} // if
if (close(fd) == -1) {
perror(argv[i]);
return EXIT_FAILURE;
} // if
} // for
} // main
read()は何を返しますか? rとは何ですか?あなたはその情報(bufに関する)で何をすべきですか? write()への呼び出しにどのように影響を与えるべきですか? –