`FLUSH` — I/O 단위 버퍼 비우기
FLUSH — I/O 단위 버퍼 비우기
지금 열려 있는 출력 단위의 버퍼를 강제로 비워서, 다른 프로세스에도 그 데이터가 보이게 하고 싶을 때가 있어요. 그때 쓰는 내장 서브루틴이 FLUSH예요.
본문
시그니처
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문