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 처리된 데이터 개수;
}
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 45 | 키패드 드라이버 | pjk | 2014.02.12 | 9800 |
| 44 |
ioctl() 함수
| makersweb | 2014.02.27 | 18378 |
| 43 | file_operations | makersweb | 2014.02.27 | 5773 |
| 42 |
리눅스 프레임버퍼(Linux Frame Buffer)
| makersweb | 2015.02.15 | 10487 |
| 41 | Build Qt 4.7.0 for Embedded Linux | makersweb | 2015.05.25 | 8188 |
| 40 | mmap() 함수, munmap() 함수 | pjk | 2014.02.05 | 18933 |
| 39 | 6. Makefile 작성의 가이드라인 | pjk | 2014.02.05 | 4293 |
| 38 | 5. make 중요 옵션 정리 | pjk | 2014.02.05 | 5168 |
| 37 | 4. Makefile를 작성할 때 알면 좋은 것들 | pjk | 2014.02.05 | 6272 |
| 36 | 3. 매크로(Macro) 와 확장자(Suffix) 규칙 | pjk | 2014.02.05 | 4821 |
| 35 | 2. 간단한 Makefile | pjk | 2014.02.05 | 5193 |
| 34 | 1. make | pjk | 2014.02.05 | 4393 |
| 33 | 리눅스 디렉터리 구조 | makersweb | 2014.02.28 | 5409 |
| » | read() 함수, write() 함수 | makersweb | 2014.03.04 | 14433 |
| 31 |
리눅스 커널 소스코드 구성도
| makersweb | 2014.03.04 | 8199 |
| 30 | 디바이스 드라이버에 대해서 | makersweb | 2014.04.19 | 7103 |
| 29 | 리눅스 데스크탑 환경 종류 | pjk | 2015.02.11 | 7008 |
| 28 |
[IPC]D-Bus 소개
| makersweb | 2015.02.28 | 32526 |
| 27 | UVC 장치를 사용할때 v4l2: select timeout 에러 발생 | makersweb | 2017.12.27 | 5218 |
| 26 |
Ubuntu16.04에서 weston구동
| makersweb | 2017.12.28 | 3867 |