Linux で C++ を使用してバッファ付きライターを実装する必要があります。ここで問題が発生しました。ファイルに文字を書き込むことはできますが、さらにファイルが無効な文字で埋められます (gedit では、ファイルは実際の文字の後に \00 で埋められます)。
コードの一部を次に示します。
BufferedWriter::BufferedWriter(const char* path) {
pagesize = getpagesize();
if ((fd = open(path, O_WRONLY | O_DIRECT | O_CREAT | O_TRUNC, S_IRWXU))
== -1) {
perror("BufferedWriter: Error while opening file");
throw -1;
}
if (posix_memalign((void**) &buffer, pagesize, pagesize) != 0) {
perror("BufferedWriter: Error while allocating memory");
throw -3;
}
for (int i = 0; i < pagesize; i++) {
buffer[i] = 0;
}
charCnt = 0;
}
...
void BufferedWriter::writeChar(char c) {
buffer[charCnt] = c;
charCnt++;
if (charCnt == pagesize) {
if (write(fd, buffer, pagesize) == -1) {
perror("BufferedWriter: Error while writing to file");
throw -5;
}
for (int i = 0; i < pagesize; i++) {
buffer[i] = 0;
}
charCnt = 0;
}
}
バッファを空白などで初期化すると、すべて正常に動作しますが、「無効な文字」を防ぐ別の方法はありますか?
私を助けてくれてありがとう