조회 수 14432 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

read() 함수


 기능
 응용 프로그램에서 디바이스 파일에 read를 수행했을 때 호출되는 함수로 읽기를 처리한다.

 

 형태 

#include <linux/fs.h>
 
 ssize_t read(struct file* filp, const char* buf size_t count, loff_t* fpos)


 매개변수
filp: 열린 파일에 대한 연산을 위한 구조체 주소
buf: 응용 프로그램에서 전달된 데이터의 선두 구조(사용자 공간)
count: 읽고자 요청한 데이터 개수
f_pos: 파일의 위치 변수(seek 값)


 반환값
 정상적으로 수행했다면 처리된 데이터 개수를, 그렇지 않으면 0보다 작은 값을
반환한다. 반환값은 저수준 파일 입출력 함수인 read의 반환값을 기준으로 해야
한다.
 

ssize_t xxx_read( struct file* filp, const char* buf, size_t count, loff_t* f_pos)
{
 if( !(준비된 데이터가 있는가?) )
 {
 if( !(filp->f_flags & O_NOBLOCK) )
 {
 // 블록 모드로 열렸다면 프로세스를 재운다.
 }
 }
 
 // 하드웨어에서 데이터를 읽는다.
 // inb(), outb(), ..., readb(), writeb() 함수 사용
 // 또는 버퍼를 읽는다.
 
 // 사용자 공간에 데이터를 전달한다.
 // copy_to_user, put_user
 
return 처리된 데이터 개수;
}



 
write() 함수


 기능
 응용 프로그램에서 디바이스 파일에write를 수행했을 때 호출되는 함수로, 쓰기를 처리한다.


 형태

 #include <linux/fs.h>
 
 ssize_t write(struct file* filp, const char* buf, size_t count, loff_t* f_pos)


 매개변수
filp: 열린 파일에 대한 연산을 위한 구조체 주소
buf: 응용 프로그램에서 전달된 데이터의 선두 구조(사용자 공간)
count: 쓰고자 요청한 데이터 개수
f_pos: 파일의 위치 변수(seek 값)


 반환값
 정상적으로 수행했다면 처리된 데이터 개수다. 그렇지 않다면 0보다 작은 값을
반환한다. 반환값은 저수준 파일 입출력 함수인 write의 반환값을 기준으로 해야한다.
 

ssize_t xxx_write( struct file* filp, const char* buf, size_t count, loff_t* f_pos)
{
 if( !(데이터가 처리 가능한가?) )
 {
 if( !(filp->f_flags & O_NOBLOCK) )
 {
 // 블록 모드로 열렸다면 프로세스를 재운다.
 }
 }
 // 사용자 공간에 데이터를 가져온다.
 // copy_from_user, get_user
 
 // 하드웨어에서 데이터를 읽는다.
 // inb(), outb(), ... , readb(), writeb() 함수 사용
 // 또는 버퍼를 읽는다.
 return 처리된 데이터 개수;
}

 
 
 
​※ 출처 : IT EXPERT 리눅스 디바이스 드라이버 - 유영창​ 저


List of Articles
번호 제목 글쓴이 날짜 조회 수
25 libblkid - USB Storage의 정보 가져오기 makersweb 2018.10.18 2976
24 tslib 크로스 컴파일과 터치스크린 보정 makersweb 2018.08.02 4861
23 Ubuntu Linux에서 dbus-c++바인딩 D-Bus 테스트 file makersweb 2018.03.07 10214
22 NFS를 통해 파일시스템 공유 makersweb 2018.03.05 3172
21 Wayland에 대한 간단한 소개 file makersweb 2017.12.29 5957
20 Ubuntu16.04에서 weston구동 file makersweb 2017.12.28 3866
19 UVC 장치를 사용할때 v4l2: select timeout 에러 발생 makersweb 2017.12.27 5217
18 [IPC]D-Bus 소개 file makersweb 2015.02.28 32523
17 리눅스 데스크탑 환경 종류 pjk 2015.02.11 7008
16 디바이스 드라이버에 대해서 makersweb 2014.04.19 7103
15 리눅스 커널 소스코드 구성도 file makersweb 2014.03.04 8198
» read() 함수, write() 함수 makersweb 2014.03.04 14432
13 리눅스 디렉터리 구조 makersweb 2014.02.28 5405
12 1. make pjk 2014.02.05 4393
11 2. 간단한 Makefile pjk 2014.02.05 5191
10 3. 매크로(Macro) 와 확장자(Suffix) 규칙 pjk 2014.02.05 4820
9 4. Makefile를 작성할 때 알면 좋은 것들 pjk 2014.02.05 6267
8 5. make 중요 옵션 정리 pjk 2014.02.05 5166
7 6. Makefile 작성의 가이드라인 pjk 2014.02.05 4292
6 mmap() 함수, munmap() 함수 pjk 2014.02.05 18927
Board Pagination Prev 1 2 3 Next
/ 3