한국어
Linux Programming
 

file_operations

makersweb 2014.02.27 14:52 조회 수 : 3288

file_operations

 

개요

  • 문자 디바이스 드라이버와 응용 프로그램을 연결하는 고리.
  • linux/fs.h에서 정의하는 이구조체는 함수 포인터 집합이다.
  • 지정하지 않으면 NULL로 남겨 두어야 한다.
  • 커널 2.6에서는 비동기 처리를 위한 필드 등이 늘어 났다.

 

/*
 * NOTE:
 * read, write, poll, fsync, readv, writev can be called
 *   without the big kernel lock held in all filesystems.
 */
struct file_operations {
	struct module *owner;
	loff_t (*llseek) (struct file *, loff_t, int);
	ssize_t (*read) (struct file *, char *, size_t, loff_t *);
	ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
	int (*readdir) (struct file *, void *, filldir_t);
	unsigned int (*poll) (struct file *, struct poll_table_struct *);
	int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
	int (*mmap) (struct file *, struct vm_area_struct *);
	int (*open) (struct inode *, struct file *);
	int (*flush) (struct file *);
	int (*release) (struct inode *, struct file *);
	int (*fsync) (struct file *, struct dentry *, int datasync);
	int (*fasync) (int, struct file *, int);
	int (*lock) (struct file *, int, struct file_lock *);
	ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
	ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
	ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};


*참고 : 커널 버전이 증가하면서 file_operations의 개수가 늘어나고 있다.

 

file_operrations 구조체 필드

 

struct module *owner;
  • 파일 오퍼레이션의 소유자를 나타낸다. 보통 <linux/module.h>에 정의되어 있는 THIS_MODULE 매크로를 사용해 초기화 한다.
off_t(*llseek)(struct file *, loff_t, int);
  • 디바이스 드라이버의 파일 포인터 위치를 강제로 이동 시키는 함수를 지정한다.
ssize_t(*lead)(struct file *, char *, size_t, loff *);
  • 디바이스에서 자료를 읽는데 사용한다. NULL이면 -EINVAL 반환
ssize_t(*write)(struct file *, const char *, size_t, loff_t *);
  • 자료를 디바이스로 보낸다. NULL 이면 -EINVAL 반환
unsigned int(*poll)(struct file *, struct poll_table_struct*);
  • 다중 입출력 처리를 가능하게 해주는 poll, epoll, select의 백엔드이다.
int(*ioctl)(struct inode *, struct file *, unsigned int, unsigned long);
  • 디바이스 관련 명령들을 제어할 수 있다.

  

 

번호 제목 글쓴이 날짜 조회 수
24 Wayland에 대한 간단한 소개 file makersweb 2017.12.29 3384
23 NFS를 통해 파일시스템 공유 makersweb 2018.03.05 1135
22 Ubuntu Linux에서 dbus-c++바인딩 D-Bus 테스트 file makersweb 2018.03.07 7076
21 tslib 크로스 컴파일과 터치스크린 보정 makersweb 2018.08.02 2183
20 libblkid - USB Storage의 정보 가져오기 makersweb 2018.10.18 676
19 리눅스 컴파일러 최신으로 업데이트 linux 2018.12.26 1900
18 PATH에 새로운 경로 추가 makersweb 2019.09.19 401
17 플랫폼 디바이스 드라이버 개발 시 많이 사용되는 커널 API 및 매크로 makersweb 2020.01.28 4756
16 initramfs (initial ram file system: 초기 램 파일 시스템) makersweb 2020.02.25 2109
15 64비트 리눅스에서 32비트 응용프로그램을 실행하려면 makersweb 2020.02.29 1820
14 Weston 의 설명 및 관련 컴포넌트 makersweb 2020.06.03 2541
13 Wayland 의 주요 객체들 makersweb 2020.06.04 940
12 Wayland 의 Client Application 프로그래밍 기본 루틴 makersweb 2020.06.04 1704
11 wayland-scanner 를 통해 Wayland 프로토콜 코드생성 makersweb 2020.06.08 968
10 리눅스 오디오 스택과 아키텍처 file makersweb 2020.09.02 2930
9 dbus-broker를 기본 DBus 구현으로 설정 makersweb 2021.01.20 1244
8 SocketCAN 유틸 사용방법 file makersweb 2022.02.05 7266
7 ifconfig 는 대부분 ip 명령으로 대체 makersweb 2022.02.12 1650
6 D-Bus ObjectManager file makersweb 2022.02.12 669
5 리눅스에서 네트워크 구성 makersweb 2022.06.11 2929