한국어
Linux Programming
 

read() 함수, write() 함수

makersweb 2014.03.04 13:36 조회 수 : 11347

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 리눅스 디바이스 드라이버 - 유영창​ 저

번호 제목 글쓴이 날짜 조회 수
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 7078
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 4757
16 initramfs (initial ram file system: 초기 램 파일 시스템) makersweb 2020.02.25 2111
15 64비트 리눅스에서 32비트 응용프로그램을 실행하려면 makersweb 2020.02.29 1821
14 Weston 의 설명 및 관련 컴포넌트 makersweb 2020.06.03 2542
13 Wayland 의 주요 객체들 makersweb 2020.06.04 941
12 Wayland 의 Client Application 프로그래밍 기본 루틴 makersweb 2020.06.04 1705
11 wayland-scanner 를 통해 Wayland 프로토콜 코드생성 makersweb 2020.06.08 969
10 리눅스 오디오 스택과 아키텍처 file makersweb 2020.09.02 2931
9 dbus-broker를 기본 DBus 구현으로 설정 makersweb 2021.01.20 1245
8 SocketCAN 유틸 사용방법 file makersweb 2022.02.05 7268
7 ifconfig 는 대부분 ip 명령으로 대체 makersweb 2022.02.12 1651
6 D-Bus ObjectManager file makersweb 2022.02.12 670
5 리눅스에서 네트워크 구성 makersweb 2022.06.11 2930