Notice
Recent Posts
Recent Comments
Today
Total
05-19 00:04
Archives
관리 메뉴

Jeongchul Kim

리눅스 read/write - 리눅스 시스템 프로그래밍 본문

Linux

리눅스 read/write - 리눅스 시스템 프로그래밍

김 정출 2016. 2. 29. 10:34


리눅스 read/write - 리눅스 시스템 프로그래밍


read와 write는 오픈된 파일로부터 데이터를 읽어오거나 저장하는 기능을 가진다.


read는 파일 기술자 file descriptor로 지정한 파일(오픈한 파일)로부터 데이터를 읽어 들인다.

read를 사용하기 위해서는 파일이 읽기 전용(O_RDONLY)이거나 읽기/쓰기(O_RDWR)이여야 한다.


#include <unistd.h>


ssize_t read(int filedescriptor, void *buf, size_t count);


> filedescriptor : 읽기 작업을 수행할 파일에 대한 파일 기술자 이다.

> buf : 버퍼는 파일로부터 읽어 들인 내용을 저장하기 위한 공간이다.

배열을 사용하며, 데이터 형식은 상관없다. 대부분은 char*를 사용

> count : 읽어 들일 파일의 내용의 크기를 지정합니다. 일반적으로 바이트 단위로 기술합니다.

> return 값 : 읽기 작업이 성공할 경우, 읽어 들인 파일의 내용의 바이트 크기가 반환되며, 1 이상의 값

파일의 내용을 계속 읽다가 EOF(파일의 끝) 도달하면 0을 반환한다.



write는 파일 기술자 file descripotr로 지정한 파일(오픈한 파일)에 데이터를 쓴다.


ssize_t write(int filedescriptor, void *buf, size_t count);



> filedescriptor : 읽기 작업을 수행할 파일에 대한 파일 기술자 이다.

> buf : 버퍼는 파일로부터 쓰려는 내용을 저장하기 위한 공간이다.

배열을 사용하며, 데이터 형식은 상관없다. 대부분은 char*를 사용

> count : 버퍼에 있는 데이터 중에 실제로 파일로 저장할 데이터의 크기이다.

> return 값 : 파일로 쓰기가 성공한 데이터의 크기이다.

대부분의 경우 count에서 지정한 값과 동일한 값이 반환됩니다.

다를 경우 쓰기 작업이 실패한 것입니다.


#include <unistd.h>

#include <fcntl.h>

#include <unistd.h>

#include <sys/types.h>

#include <stdio.h>

int main()

{

int fdin, fdout;

ssize_t nread;

char buf[1024] = {0};

fdin = open("read.txt", O_RDONLY);

fdout = open("write.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);

while((nread = read(fdin, buf, 1024)) > 0) {

if(write(fdout, buf, nread) < nread) {

//write failed

close(fdin);

close(fdout);

}

}

// write success

puts("write success");

close(fdin);

close(fdout);

}









Comments