태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

지니넷

'2009/06'에 해당되는 글 2건

  1. 2009.06.08 proc 파일 시스템 동작 방식
  2. 2009.06.08 파일 타입, 접근 허가 상수
shell에서 명령을 이용하거나 app에서 파일 처리 함수로 proc 파일에 접근하면, 커널은 proc_dir_entry 구조체 변수의 정보를 이용해 proc 파일을 생성한 디바이스 드라이버가 제공하는 함수를 호출한다.
app에서 proc 파일에 쓰기를 하면 proc_dir_entry 구조체 필드의 write_proc 필드에 지정된 함수가 호출되고, 이 함수는 app에서 써넣어진 데이터를 처리해야 한다.
반대로 app에서 proc 파일에 읽기를 수행하면 proc_dir_entry 구조체 필드의 read_proc 필드에 지정된 합수가 호출되고, 이 함수는 app에서 읽을 데이터를 제공해야 한다.
◇ proc 파일 시스템은 일반 파일 시스템처럼 처리가 가능하고, 대부분의 디바이스 드라이버는 PAGE_SIZE - 80 크기 이하의 파일만 다룬다.

struct proc_dir_entry *root_proc_dir;
root_proc_dir = proc_mkdir("testdir", 0);

struct proc_dir_entry *root_proc_file;
root_proc_file = create_proc_entry("testfile", S_IFREG|S_IRWXU, root_proc_dir);
if ( ! root_proc_file )
    return CU_ERROR;
root_proc_file->read_proc = ...
root_proc_file->write_proc = ...

◇ proc 파일은 proc 디렉토리와 달리 읽기와 쓰기에 대한 함수를 제공해야 한다. 그렇지 않으면 app에서 읽기나 쓰기가 실패한다.

int read_proc_test (char *page, char **start, off_t off, int count, int *eof, void *data_unused)
{
    page에 쓴다.
    *eof = 1;
    return 써 넣어진 데이터 수;
}

◇ page는 파일 전체의 메모리 주소고, 이 주소가 가리키는 공간의 크기는 PAGE_SIZE다. 그러나 이 크기 모두를 사용하는 것보다 PAGE_SIZE-80 크기로 생각하고 작성하는 편이 안전하다.
◇ 함수 반환값이 app에서 요구한 크기보다 작고, *eof에 0을 대입하여 반환하면 계속 호출된다. 그러므로 *eof에 1을 대입하고 함수를 종료하는 편이 안전하다. *eof에 0을 대입하고 함수를 종료하는 경우는 proc 파일 스트림을 구현하기 위한 방법을 사용할 때이다.

int write_proc_test (struct file *file, const char *buffer, unsigned long count, void *data)
{
    사용자 공간의 메모리인 buffer의 내용을 커널 공간에 써넣는다.
    return 처리된 데이터 수
}

◇ buffer는 사용자 메모리 공간으로 직접 접근되지 않으므로 copy_from_user() 함수 등을 이용하여 커널 메모리 공간에 복사한 후 사용해야 한다.





저작자 표시
신고
Posted by 지니넷 Trackback 0 Comment 0
<include/stat.h>

■ 파일 타입 상수

ID        Vlaue      Description
--------  -------    ---------------------------------------------------
S_IFMT    0170000    특수 파일을 나타내는 bit mask와 같은 역할을 한다
S_IFSOCK  0140000    socket interface
S_IFLINK  0120000    link
S_IFREG   0100000    일반 normal file
S_IFBLK   0060000    block device file
S_IFDIR   0040000    directory file
S_IFCHR   0020000    character device file
S_IFIFO   0010000    FIFO file
S_ISUID   0004000    setuid bit이 설정된 파일
S_ISGID   0002000    setgid bit이 설정된 파일
S_ISVTX   0001000    sticky bit이 설정된 파일


■ 접근 허가 상수

ID        Vlaue      Description
--------  -------    ---------------------------------------------------
S_IRWXU   0000700    owner에 대한 read, write, excute 권한
S_IRUSR   0000400    owner에 대한 read 권한
S_IWUSR   0000200    owner에 대한 write 권한
S_IXUSR   0000100    owner에 대한 excute 권한
--------  -------    ---------------------------------------------------
S_IRWXG   0000070    group에 대한 read, write, excute 권한
S_IRGRP   0000040    group에 대한 read 권한
S_IWGRP   0000020    group에 대한 write 권한
S_IXGRP   0000010    group에 대한 excute 권한
--------  -------    ---------------------------------------------------
S_IRWXO   0000007    other에 대한 read, write, excute 권한
S_IROTH   0000004    other에 대한 read 권한
S_IWOTH   0000002    other에 대한 write 권한
S_IXOTH   0000001    other에 대한 excute 권한

#define S_IRWXUGO   (S_IRWXU|S_IRWXG|S_IRWXO)
#define S_IALLUGO   (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
#define S_IRUGO     (S_IRUSR|S_IRGRP|S_IROTH)
#define S_IWUGO     (S_IWUSR|S_IWGRP|S_IWOTH)
#define S_IXUGO     (S_IXUSR|S_IXGRP|S_IXOTH)

저작자 표시
신고
Posted by 지니넷 Trackback 0 Comment 0


티스토리 툴바