2016-12-21 1 views
3

VFS 서버에서 파일 이름을 매개 변수로 지정하고 MINIX3.2.1에서이 특정 파일의 inode 번호를 인쇄 할 새 시스템 호출을 만들고 싶습니다. do_stat() 함수의 코드 (/usr/src/servers/vfs/stadir.c 내부)를 살펴본 결과, v_ode_nr에 액세스하기 위해 v_ode 구조체 변수 인 eat_path()를 할당해야한다는 것을 알았습니다. inode 번호입니다. 어떻게 내가 원하는 파일을 할당 할 수 있는지, 사용자 입력 파일 이름 (m_in.m1_p1)을 어디에 넣을 수 있습니까? 여기 MINIX의 파일 이름으로 파일의 inode 번호를 가져옵니다.

당신은 sys_call 인수로 사용자 입력을 추가 stadir.c

int do_stat() { 
    /* Perform the stat(name, buf) system call. */ 
    int r; 
    struct vnode *vp; 
    struct vmnt *vmp; 
    char fullpath[PATH_MAX]; 
    struct lookup resolve; 
    int old_stat = 0; 
    vir_bytes vname1, statbuf; 
    size_t vname1_length; 

    vname1 = (vir_bytes)job_m_in.name1; 
    vname1_length = (size_t)job_m_in.name1_length; 
    statbuf = (vir_bytes)job_m_in.m1_p2; 

    lookup_init(&resolve, fullpath, PATH_NOFLAGS, &vmp, &vp); 
    resolve.l_vmnt_lock = VMNT_READ; 
    resolve.l_vnode_lock = VNODE_READ; 

    if (job_call_nr == PREV_STAT) 
    old_stat = 1; 

    if (fetch_name(vname1, vname1_length, fullpath) != OK) 
    return (err_code); 
    if ((vp = eat_path(&resolve, fp)) == NULL) 
    return (err_code); 
    r = req_stat(vp->v_fs_e, vp->v_inode_nr, who_e, statbuf, old_stat); 

    unlock_vnode(vp); 
    unlock_vmnt(vmp); 

    put_vnode(vp); 
    return r; 
} 

답변

1

(문자 * 파일 이름) { ... }

INT의 do_stat, 내가 아니었다 fetch_name() 매개 변수가 작동하는 방식을 이해할 수 있습니다 (vname1, vname1_length 및 fullpath). 그래서 내가 /usr/src/vfs/params.h #define name m3_p1 #define flength m2_l1 #define name1 m1_p1 #define name2 m1_p2 #define name_length m3_i1 #define name1_length m1_i1 #define name2_length m1_i2 #define nbytes m1_i2

Υou이 m1_p1을 의미 NAME1 볼 수 있고 name1_length이 m1_i1 메시지 변수의 약자로 보면 그렇게하기 위해서이다.

는 fetch_name 기능에 관해서는, 실제로 (사용자로부터 파일명) 경로를 가져 와서 fullpath에 파일로 변환 /usr/src/vfs/utility.c

int fetch_name(vir_bytes path, size_t len, char *dest) 
{ 
/* Go get path and put it in 'dest'. */ 
int r; 

그래서 fetch_name 보였다.

지금 질문은 실제로 size_t len ​​변수가 무엇입니까 ... 나는 온라인에서 그것을 찾았고 경로 변수의 strlen이라는 것을 알았습니다!

-1

내부 do_stat() 함수이다. 만약 내가 제대로 이해하고 그것을 학교 과제, 그래서 당신은 그냥 수도 : 내 문제에 대한 해결책을 발견했습니다

0

m.m1_i1에 저장된 strlen (이름) +1입니다.

관련 문제