fflush 해주어야 한다.
이것은 유닉스계열 혹은 리눅스의 파일 시스템 구조상 각 프로세스는 자신이 오픈한 디스크립터 테이블을 유지하고 있고 디스크립터 테이블에는 file table에 대한 포인터를 유지한다. 파일 테이블에는 파일 옵셋과 v-node 테이블에 대한 포인터가 있고 이 v-node table에는 파일의 length나 i-node정보를 유지하면서 공유하게 된다.
조금 복잡하게 설명했으나, 즉 각 화일 디스크립터는 옵셋만을 각각 다르게 유지하고 파일 정보(길이,inode정보)는 공유한다는 것이다.
그러므로 구조상 업데이트 된 내용을 읽어볼 수 있다. 하지만, 모든 파일 시스템이 그러한 것은 아니다. 즉, 파일 정보를 공유하지 않는 파일 시스템도 있다는 것이다.
..
파일에 쓴 후에 fflush 를 하시면 될것 같습니다.
file write 할때마다 디스크에 쓰는 것이 아니라
먼저 버퍼에 여러번 써놓고.. 한번에 디스크로 flush하는데
이것을 강제로 하는 역할을 하는 것이 fflush입니다.
man fflush해보세여..
지금 pc방인 관계로 확인을 못해봤는데..
잘못된 대답이라면..다른 분들이 말씀해주세여..
음...
fflush 해주어야 한다.
이것은 유닉스계열 혹은 리눅스의 파일 시스템 구조상 각 프로세스는 자신이 오픈한 디스크립터 테이블을 유지하고 있고 디스크립터 테이블에는 file table에 대한 포인터를 유지한다. 파일 테이블에는 파일 옵셋과 v-node 테이블에 대한 포인터가 있고 이 v-node table에는 파일의 length나 i-node정보를 유지하면서 공유하게 된다.
조금 복잡하게 설명했으나, 즉 각 화일 디스크립터는 옵셋만을 각각 다르게 유지하고 파일 정보(길이,inode정보)는 공유한다는 것이다.
그러므로 구조상 업데이트 된 내용을 읽어볼 수 있다. 하지만, 모든 파일 시스템이 그러한 것은 아니다. 즉, 파일 정보를 공유하지 않는 파일 시스템도 있다는 것이다.
감사합니다.
- by swhong in jgdr.net -
fopen, fwrite, fputs 등으로 사용하는 것은 kernel
fopen, fwrite, fputs 등으로 사용하는 것은 kernel level 구현과는 거리가 좀 있습니다. 이들 함수는 c library 안에 있는 것입니다.
따라서, fflush 도 kernel 상에서 쓰기지연된것을 강제로 기록하는 것이 아니라, user level에서 쓰기 지연된 즉, c library 내의 buffer에서 지연되고 있는 것에 대해 flush를 하는 것입니다.
bufferred i/o 를 c library 상에서 표준화한것이므로, 대부분의 구현에서 위와 같은 현상이 나타나지리라 보입니다.
---
http://coolengineer.com
댓글 달기