Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

write(2)

1장. write(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

파일기술자가 가리키는 파일에 쓴다. 이 파일기술자는 open(2), socket(2) 등으로 얻을수 있다.


1.1절. 사용법

#include <unistd.h>

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


1.2절. 설명

첫번째 아규먼트인 fd 는 열린파일 기술자이다. 이것은 보통 open(2), socket(2) 등으로 만들어지며, 때때로 pipe(2) 등으로 만들어지기도 한다.

두번째 아규먼트(:12)는 fd 로 쓸 데이타이며, count 는 fd 쓸 데이타의 크기이다.


1.3절. 반환값

성공할경우 쓰여진 바이트 만큼이 리턴된다. 0이면 쓰여진것이 없음을 나타내며, -1 일경우는 에러가 발생했을 경우이다. 에러가 발생했을경우에는 errno 에 적당한 값이 설정된다.


1.4절. 에러

다양한 원인에 의해서 에러가 발생할수 있으며 아래와 같은 에러 메시지들이 있다.

EBADF

fd 가 유효한 파일 기술자가 아니거나 쓰여질수 없도록 열려있을경우

EINVAL

fd 가 쓰기에 적당하지 않은 객체와 연결되어 있을경우

EFAULT

buf 가 접근할 수 없는 주소 공간을 가리키고 있을때

EPIPE

fd 가 끝이 닫혀진 소켓이나 파이프(:12)에 연결되어 있을때. 쓰고 있는 프로세스(:12)가 SIGPIPE signal(:12)를 받았을때 발생한다.

EAGAIN

fd 가 비봉쇄(O_NONBLOCK) 로 열렸을경우, 데이터를 쓰기 위해 fd 와 연결된 파이프나 소켓에 공간이 없을때, 발생한다. 봉쇄로 열렸을경우에는 연결된 파이프나 소켓에 공간이 있을때까지 봉쇄된다.

EAGAIN

fd 가 비봉쇄(O_NONBLOCK) 로 열렸을경우, 데이터를 쓰기 위해 fd 와 연결된 파이프나 소켓에 공간이 없을때, 발생한다. 봉쇄로 열렸을경우에는 연결된 파이프나 소켓에 공간이 있을때까지 봉쇄된다.


1.5절. 예제

#include <fcntl.h>

#include <unistd.h>
#include <stdio.h>

struct data
{
    int         age;
    char        name[25];
};
int main()
{
    int fd;
    int n;
    struct data mydata, readdata;

    fd = open("data.txt", O_CREAT|O_RDWR);
    if (fd == -1)
    {
        perror("open error : ");
    }


    mydata.age = 25;
    strcpy(mydata.name, "hello");
    n = write(fd, (void *)&mydata, sizeof(mydata));
    close(fd);
}
		
이 예제는 data.txt 라는 파일을 일기/쓰기 모드로 open 한 다음에 data 구조체(:12)를 파일에 적는 프로그램이다.