쓰기() 구현은 임의 접근을 가정해야합니까? 아니면 순차적으로 수행되고 오프셋이 증가 할 것 같은 몇 가지 가정이있을 수 있습니까?FUSE의 쓰기 순서 보장
VFS 인터페이스를 설명하는 POSIX 또는 SUS 사양에 대한 링크에 대한 추가 점을 얻게됩니다.
쓰기() 구현은 임의 접근을 가정해야합니까? 아니면 순차적으로 수행되고 오프셋이 증가 할 것 같은 몇 가지 가정이있을 수 있습니까?FUSE의 쓰기 순서 보장
VFS 인터페이스를 설명하는 POSIX 또는 SUS 사양에 대한 링크에 대한 추가 점을 얻게됩니다.
임의로. read
및 write
인터페이스가 크기와 오프셋을 모두 사용하는 이유가 있습니다. 은이 아니며 fuse_operations
구조체에있는 seek
필드가 있음을 알 수 있습니다. 사용자 프로그램이 FUSE 파일에서 seek
/lseek
을 호출하면 커널 파일 설명자의 오프셋이 업데이트되지만 FUSE fs는 전혀 통지되지 않습니다. 나중에 읽기와 쓰기가 다른 오프셋을 사용하여 시작되기 때문에이를 처리 할 수 있어야합니다. 구현에 대해 무언가가 불가능 해지면 만족할 수없는 쓰기에 -EIO
을 반환해야합니다.
기존 파일이 쓰기 위해 열리지 않도록하는 FUSE 파일 시스템에 이상한 것이 없으면 쓰기 작업 구현시 오프셋에 대한 쓰기를 지원해야합니다. 응용 프로그램은 파일의 임의 위치에 lseek()
으로 쓸 수 있습니다. 파일이 열려있는 동안 주위를 돌아 다니다.
fd = open("file", O_WRONLY);
lseek(fd, SEEK_SET, 100);
write(fd, ...);
lseek(fd, SEEK_SET, 0);
write(fd, ...);
내가 쓸 곳과 장소를 순진하게 쓸 수 있으며 파일 크기가 변경되면 truncate()를 호출하기 위해 OS를 사용하거나 close() 할 때 가장 가까운 위치를 추적하고 자르지 않으면 안됩니까? –
Eh? Linux의 VFS 인터페이스는 구현 세부 사항입니다. POSIX, SUS 또는 다른 외부 표준에 의해 지정되지는 않습니다 (그러나 가능한 경우 해당 표준을 준수합니다). 마찬가지로 퓨즈는 표준에 의해 정의되지 않는다. 구현 자체로 정의 된 짐승이다. –
@CharlesDuffy 첫 번째 질문입니다 *. POSIX 또는 SUS에 의해 규정 된 것으로 가정했지만 찾을 수 없습니다. –