fsync() - 直接アクセス記憶装置への変更内容の書き込み

標準

標準/拡張機能 C/C++ 依存項目

POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _POSIX1_SOURCE 2
#include <unistd.h>

int fsync(int fildes);

機能説明

オープン・ファイル記述子 fildes によって指示されたファイル のデータすべてを、fildes に関連したストレージに転送 します。転送が完了するまで、またはエラーを検出するまでは、fsync() は 戻りません。

戻り値

fsync() は、正常終了時には 0 を戻します。

正常に実行されなかった場合、fsync() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EBADF
fildes が、有効なオープン・ファイル記述子ではありません。
EINVAL
ファイルは通常のファイルではありません。

CELEBF48
⁄* CELEBF48 *⁄
#define _POSIX_SOURCE
#include <fcntl.h>
#include <sys⁄stat.h>
#include <sys⁄types.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
#include <stdlib.h>

#define mega_string_len 250000

main() {
  char *mega_string;
  int  fd, ret;
  char fn[]="fsync.file";

  if ((mega_string = (char*) malloc(mega_string_len)) == NULL)
    perror("malloc() error");
  else if ((fd = creat(fn, S_IWUSR)) < 0)
    perror("creat() error");
  else {
    memset(mega_string, 's', mega_string_len);
    if ((ret = write(fd, mega_string, mega_string_len)) == -1)
      perror("write() error");
    else {
      printf("write() wrote %d bytes¥n", ret);
      if (fsync(fd) != 0)
        perror("fsync() error");
      else if ((ret = write(fd, mega_string, mega_string_len)) == -1)
        perror("write() error");
      else
        printf("write() wrote %d bytes¥n", ret);
    }
    close(fd);
    unlink(fn);
  }
}
出力:
write() wrote 250000 bytes
write() wrote 250000 bytes

関連情報