私はこのコードがうまくいかない理由を理解するのに苦労しています。私はI/O操作の基礎を学んでおり、標準入力から与えられたものを 'log.txt'ファイルに書き込むCプログラムを考え出す必要があり、 'stop'という単語が入力されると、プログラムは停止する必要があります。ファイルにI/Oが書き込む問題
だから私のコードは次のとおりです。
#include "main.h"
#define SIZE 1024
int main(int argc, char *argv[])
{
int fd;
int readBytes;
int writBytes;
char *buffer;
if ((fd = open("log.txt", O_WRONLY|O_APPEND)) < 0)
{
perror("open");
}
buffer = (char *) calloc (SIZE, sizeof(char));
while ((readBytes = read(0, buffer, SIZE) < SIZE)&&(strncmp(buffer, "stop", 4) != 0));
if ((writBytes = write(fd, buffer, SIZE)) < 0)
{
perror("write");
}
if ((close(fd)) < 0)
{
perror("close");
}
}
私が入力した場合:
this is just a text
this is more text
and text again
stop
:
this is just a text
stop
を私が文を超えて入力した場合、出力は
stop
is just a text
です
これは、ログに記録されているものです。
stop
ext again
xt
t
そしてその上に、私はvimのからのlog.txtファイルまたは私が見ることができるだけで、テキストエディタ「\ 00年代を編集しようとした場合。 \ 00は、利用可能な1024バイトから空のまま残っているすべてのバイトを表していると思いますか?それをどうやって防ぐことができますか?
私はそれがある種の話題ではないことを知っていますが、これらのオープン/リード/ライト機能は正確に何であり、どこで定義されていますか?彼らは彼らのフリードe.t.cに似ているようです。カウンターパート。 – Lefteris
'read'と' write'は ''の ''、 'open'にあります。 manページを見るために 'man 2 open' - セクション2:システムコール。 –
Mat
ありがとうマットは今見ています – Lefteris