`FLUSH` — I/O 단위 버퍼 비우기

FLUSH — I/O 단위 버퍼 비우기

지금 열려 있는 출력 단위의 버퍼를 강제로 비워서, 다른 프로세스에도 그 데이터가 보이게 하고 싶을 때가 있어요. 그때 쓰는 내장 서브루틴이 FLUSH예요.

출처: The GNU Fortran Compiler — FLUSH (Flush I/O unit(s))

본문

시그니처

CALL FLUSH(UNIT)

설명

현재 출력용으로 열려 있는 Fortran 단위(들)를 비워요. 선택 인자 없이 호출하면 모든 단위를 비우고, 인자를 주면 그 단위만 비워요.

클래스

Subroutine (서브루틴)

인자

  • UNIT — (선택) INTEGER 타입이어야 해요.

주의사항

Fortran 2003 표준부터는 FLUSH 문(statement) 이 생겨서, FLUSH 내장 함수보다 이 문을 쓰는 게 좋아요.

FLUSH 내장 함수와 Fortran 2003의 FLUSH 문은 효과가 동일해요. 둘 다 런타임 라이브러리의 I/O 버퍼를 비워서 데이터가 다른 프로세스에 보이게 해요. 다만 데이터가 디스크에 커밋된다는 보장은 없어요.

POSIX 시스템에서 데이터를 저장 장치로 확실히 전송하고 싶다면, fsync 함수를 I/O 단위의 POSIX 파일 디스크립터(내장 FNUM으로 얻음)를 인자로 호출하면 돼요. 다음 예가 그 방법을 보여줘요:

  ! Declare the interface for POSIX fsync function
  interface
    function fsync (fd) bind(c,name="fsync")
    use iso_c_binding, only: c_int
      integer(c_int), value :: fd
      integer(c_int) :: fsync
    end function fsync
  end interface

  ! Variable declaration
  integer :: ret

  ! Opening unit 10
  open (10,file="foo")

  ! ...
  ! Perform I/O on unit 10
  ! ...

  ! Flush and sync
  flush(10)
  ret = fsync(fnum(10))

  ! Handle possible error
  if (ret /= 0) stop "Error calling FSYNC"

표준

GNU 확장이에요.

더 알아보기

  • FNUM — I/O 단위의 파일 번호
  • Fortran 2003 FLUSH