2014-07-20 5 views
1

쓰기() 구현은 임의 접근을 가정해야합니까? 아니면 순차적으로 수행되고 오프셋이 증가 할 것 같은 몇 가지 가정이있을 수 있습니까?FUSE의 쓰기 순서 보장

VFS 인터페이스를 설명하는 POSIX 또는 SUS 사양에 대한 링크에 대한 추가 점을 얻게됩니다.

+0

Eh? Linux의 VFS 인터페이스는 구현 세부 사항입니다. POSIX, SUS 또는 다른 외부 표준에 의해 지정되지는 않습니다 (그러나 가능한 경우 해당 표준을 준수합니다). 마찬가지로 퓨즈는 표준에 의해 정의되지 않는다. 구현 자체로 정의 된 짐승이다. –

+0

@CharlesDuffy 첫 번째 질문입니다 *. POSIX 또는 SUS에 의해 규정 된 것으로 가정했지만 찾을 수 없습니다. –

답변

3

임의로. readwrite 인터페이스가 크기와 오프셋을 모두 사용하는 이유가 있습니다. 이 아니며 fuse_operations 구조체에있는 seek 필드가 있음을 알 수 있습니다. 사용자 프로그램이 FUSE 파일에서 seek/lseek을 호출하면 커널 파일 설명자의 오프셋이 업데이트되지만 FUSE fs는 전혀 통지되지 않습니다. 나중에 읽기와 쓰기가 다른 오프셋을 사용하여 시작되기 때문에이를 처리 할 수 ​​있어야합니다. 구현에 대해 무언가가 불가능 해지면 만족할 수없는 쓰기에 -EIO을 반환해야합니다.

3

기존 파일이 쓰기 위해 열리지 않도록하는 FUSE 파일 시스템에 이상한 것이 없으면 쓰기 작업 구현시 오프셋에 대한 쓰기를 지원해야합니다. 응용 프로그램은 파일의 임의 위치에 lseek()으로 쓸 수 있습니다. 파일이 열려있는 동안 주위를 돌아 다니다.

fd = open("file", O_WRONLY); 

lseek(fd, SEEK_SET, 100); 
write(fd, ...); 

lseek(fd, SEEK_SET, 0); 
write(fd, ...); 
+0

내가 쓸 곳과 장소를 순진하게 쓸 수 있으며 파일 크기가 변경되면 truncate()를 호출하기 위해 OS를 사용하거나 close() 할 때 가장 가까운 위치를 추적하고 자르지 않으면 안됩니까? –

관련 문제