Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
A.3. fsync
Fsync
I/O の高い操作と呼ばれますが、これは完全には当てはまるわけではありません。
ユーザーがリンクをクリックして新しいページに移動するたびに sqlite ライブラリーを呼び出すために使用される Firefox。
fsync
と 呼ばれ、ファイルシステム設定(主にデータ順モードの ext3)が原因で、何も発生しなかった場合に長いレイテンシーがありました。別のプロセスが同時に大きなファイルをコピーしている場合、これには長い時間がかかる可能性があります(最大 30 秒)。
ただし、
fsync
がまったく使用されていない他のケースでは、ext4 ファイルシステムへの切り替えで発生した問題がありました。Ext3 は data-ordered モードに設定されており、数秒ごとにメモリーをフラッシュしてディスクに保存します。ただし、ext4 と laptop_mode では、保存の間隔が長くなり、システムが予期せずオフになったときにデータが失われる可能性がありました。ext4 にはパッチが適用されていますが、アプリケーションの設計を慎重に検討し、必要に応じて fsync
を使用する必要があります。
設定ファイルの読み取りと書き込みの簡単な例は、ファイルのバックアップを行う方法、またはデータが失われる方法を示しています。
/* open and read configuration file e.g. ./myconfig */ fd = open("./myconfig", O_RDONLY); read(fd, myconfig_buf, sizeof(myconfig_buf)); close(fd); ... fd = open("./myconfig", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR); write(fd, myconfig_buf, sizeof(myconfig_buf)); close(fd);
より良いアプローチは以下のとおりです。
/* open and read configuration file e.g. ./myconfig */ fd = open("./myconfig", O_RDONLY); read(fd, myconfig_buf, sizeof(myconfig_buf)); close(fd); ... fd = open("./myconfig.suffix", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR write(fd, myconfig_buf, sizeof(myconfig_buf)); fsync(fd); /* paranoia - optional */ ... close(fd); rename("./myconfig", "./myconfig~"); /* paranoia - optional */ rename("./myconfig.suffix", "./myconfig");