GETVFSENT(3)

명칭
getvfsent, setvfsent, endvfsent, vfsisloadable, vfsload - 가상 파일 시스템 모듈을 관리

프로그램 라이브러리
libc

서식
<sys/param.h> <sys/mount.h> struct ovfsconf * getvfsent(void) void setvfsent(int cachelist) void endvfsent(void) int vfsisloadable(const char *name) int vfsload(const char *name)

해설
getvfsent() 함수에 의해, 커널이 관리하는 인스톨제의 가상 파일 시스템 모듈 의 리스트에, 간단하게 액세스 할 수 있습니다. 리스트의 파일 시스템을 1 회에 1 개(살)씩 단계적으로 처리합니다. 이용할 수 있는 데이터가 그 이상 없어지면(자), 눌 포인터가 돌아갑니다. 구조체 “struct ovfsconf” 의 필드는 다음과 같습니다.

vfc_name
    파일 시스템의 이름.
vfc_index
    커널에 의해 할당 mount(2) 의 호출에 사용된, 파일 시스템의 타입 번호.
vfc_refcount
    이 파일 시스템의 참조수 (통상은 mount수입니다만, 언로드할 수 없는가 커널에 정적으로 링크 되고 있다 파일 시스템에서는, mount수에 1 을 더한 것이 됩니다).
vfc_flags
    flag bit.

플래그는 다음과 같이 정의되고 있습니다:

VFCF_STATIC
    커널에 정적으로 짜넣어지고 있다
VFCF_NETWORK
    데이터를 네트워크 경유로 취득 할 수 있다
VFCF_READONLY
    기입은 미실장
VFCF_SYNTHETIC
    데이터는 열매 파일을 표현하지 않는다
VFCF_LOOPBACK
    mount 끝난 파일 시스템에 대한 별명
VFCF_UNICODE
    파일명을 Unicode 로 격납

setvfsent() 및 endvfsent() 함수는, sysctl(3) (이)가 따라 커널 (으)로부터 정리해 취득되는 파일 시스템 리스트의, 캐싱 제어에 사용됩니다. setvfsent() 의 cachelist 파라미터가 0 이 아니면, 이것들 검색 함수의 어떤 것인지를 최초로 호출한 시점에서 리스트는 다만 1 회만 꺼내져 캐쉬를 클리어 하기 위해서 endvfsent() 하지만 불려 갈 때까지 보관 유지됩니다. 일반적으로 setvfsent(1) (은)는, getvfsent() (을)를 사용하는 프로그램에 의해 불려 갈 필요가 있어, setvfsent(0) 하 (이것도 디폴트 상태로), vfsload() 함수를 사용하는 프로그램에 의해 불려 갈 필요가 있습니다.

vfsisloadable() 함수는, 다음에 vfsload(name) 의 호출이 계속될 것 같다면 비 0 치를 돌려줍니다. 여기서 “그렇게” 이렇게 말하는 것은, vfsisloadable() 하 vfsload() 하지만 성공하기 위한 조건을 체크하지 않기 때문입니다.

vfsload() 함수는, 파일 시스템 name 의 실장 커널 모듈을 로드 하려고 시도합니다. 파일 시스템 모듈을 무사하게 밝혀내 로드했다 경우는 0 이, 그 외의 경우는 비 0 이 돌아갑니다. 이 함수를 호출할 수 있는 것은 다음에 가리키는 상황만입니다.

1.  getvfsbyname() (을)를 호출해 비 0 치가 돌아갔을 경우.

2.  vfsisloadable() (을)를 호출해 비 0 치가 돌아갔을 경우.

mount_cd9660(8) 의 소스로부터 배달시킨 사용예를 다음에 나타냅니다.

    struct vfsconf *vfc;
    int error;
    /* 여기에 셋업 코드가 들어간다 */
    error = getvfsbyname("cd9660", &vfc);
    if (error && vfsisloadable("cd9660")) {
    	if (vfsload("cd9660"))
    		err(EX_OSERR, "vfsload(cd9660)");
    	endvfsent();	/* flush cache */
    	error = getvfsbyname("cd9660", &vfc);
    }
    if (error)
    	errx(1, "cd9660 filesystem is not available");
    if (mount(vfc.vfc_name, dir, mntflags, &args) < 0)
    	err(1, NULL);

반환값
getvfsent() routine는, 성공하면(자) 정적 데이터 구조체의 포인터를, 실패하면(자) 눌 포인터를 돌려줍니다. 원인이 sysctl(3) 또는 malloc(3) 그리고 실패했을 경우는, errno 하지만 그것들 함수용으로 문서 된 값의 1 개(살)에 설정되는 일이 있습니다. 그 외의 경우 errno (은)는 개편되지 않습니다.

vfsload() 함수는 실패하면(자) 비 0 치를, 성공하면(자) 0 을 돌려줍니다. vfsload() 하지만 실패했을 경우, kldload(2) 용으로 기술되었다 errno 값이 설정될 수 있습니다.

관련 항목
kldload(2), mount(2), mount(8)

저자
-nosplit 이 로드 가능 파일 시스템 서포트는, Terry Lambert 에 의한 범용의 로드 가능 커널 모듈 서포트를 베이스로, Garrett A. Wollman 에 의해 쓰여졌습니다.

역사
getvfsent() 함수 패밀리는 FreeBSD 2.0 그리고 처음 등장했습니다.