以下のコードを参照してください。
#include < stdio.h >
#include < fcntl.h >
#include < stdlib.h >
#include < string.h >
int main(int argc,char **argv,char **envp)
{
int fd;
size_t sz;
char filebuffer[1024];
int loop;
fd=open("sample",O_RDONLY);
if(fd==-1)
{
perror("");
exit(1);
}
loop=0;
while(++loop<300)
{
lseek(fd,0,SEEK_SET);
memset(filebuffer,0,1024);
sz=read(fd,filebuffer,1024);
printf("%d.sz=%zd\t%s\n",loop,sz,filebuffer);
sleep(1);
}
close(fd);
return 0;
}
このコードでは、ファイルを読み取ることができます。しかし、読み取り中に同時にファイルを変更する(ファイル「サンプル」を読み取る)場合。その後、変更されたファイルを読み取ることができません。O_SYNC フラグも試しました。それでも、動作していませんが、O_DIRECT is undefined エラーが発生しています。変更を確実に読み取れるようにするにはどうすればよいですか? 2番目に、ファイルの読み取りを閉じて開くと、変更されたファイルを読み取ることができることがわかりました。
質問:
変更されたファイルを閉じたり開いたりせずに読み取るにはどうすればよいですか?