2010-08-17 7 views
9

나는 오래된 리눅스 커널 코드를 새로운 버전 2.6.32로 이식하고있다.struct 파일을 복사하는 방법은 무엇입니까?

파일 설명자를 복사하는 부분이 있습니다. 아이디어는 새로운 파일 기술자와 새로운 struct 파일을 할당하고 또 다른 f_op과 함께 사용하고 다른 모든 필드는 구조체 파일을 original 's와 동일하게 유지합니다.

어떻게하면 최신 커널에서이 작업을 수행 할 수 있습니까? 대략적인 구현을 작성했지만 file_get, path_get 중 무엇을 호출해야하는지 또는 다른 사람이 카운터 증분을 사용해야하는지 여부는 알지 못합니다.

struct file * copy_file(const struct file * iOrig, int * oNewFd) { 
    if (!orig) 
    return 0; 
    *oNewFd = get_unused_fd(); 
    if (*oNewFd < 0) 
    return 0; 
    struct file * rv = alloc_file(orig->f_path.mnt, orig->f_path.dentry, orig->f_path.mode, orig->f_op); 
    if (!rv) 
    goto free_fd; 
    fd_install(fd, rv); 
    return rv; 
free_fd: 
    put_unused_fd(*oNewFd) 
    return 0; 
} 

P. 실제로 복사 된 원본 파일의 모든 파일을 갖는 것은 반드시 필요한 것은 아닙니다. 사용자 공간에서 새로운 파일 작업 집합 만 허용하면됩니다. 따라서 이 소유 한 새로운 설명자를 생성하면 현재f_op이 주어진다.

+0

목표가 무엇인지 약간 분명하지 않습니다. 같은 파일을 가리키는 새로운 파일 설명자 나 다른 경로를 가진 파일의 복사본을 원하십니까? –

+0

같은 파일을 가리 키지 만 다른 파일 작업 집합 (close, ioctl)을 가진 파일 설명자를 원합니다. – Basilevs

+0

사실 파일 구조 할당에 관한 정보는 도움이 될 수 있습니다. – Basilevs

답변

관련 문제