Linux/Linux_programing

리눅스 FILE - Write() 시스템콜

sosal 2009. 9. 27. 06:50
반응형
/*
 * made by so_sal
 * http://sosal.tistory.com/
 */


정수값

이름

0

표준 입력( stdin ) /dev/stdin

1

표준 출력( stdout ) /dev/stdout

2

표준 오류( stderr )

모든 프로세스가 갖추어야 하는, 갖추고 있는 파일 서술자는 위 세 개가 있다고
01.번에서 언급한적이 있다.

#include <unistd.h>
         size_t write( int fildes, const void *buf, size_t nbytes );

첫번째 인자 fildes   :: 파일 서술자,
두번째 인자 buf      :: 파일 서술자에 쓰려고 하는 데이타
세번째 인자 nbytes :: 쓰려는 바이트의 수

write함수는 실제로 써진 바이트의 수를 리턴한다. (만일 write함수 실패시 -1 반환)
아래는 beginning Linux programming 예제입니다.

#include<unistd.h>
#include<stdlib.h>  //exit(0) 등 프로세스 관련 함수
int main(){
  if (( write( 1, "Here is some data\n", 19 )) != 18 )
    
write( 2, "A write error has occurred on file descriptor 1\n", 46);
  
exit(0);
}

unistd.h에 있는 write함수를 기본적으로 지정되어있는 파일 서술자 1번(표준 출력)에
"Here is some data\n" 를 먼저 if절에서 써버리네요.
1번 표준출력에 저 data를 쓰게 되면, 이 파일 서술자는 자동으로 출력하게 합니다.
(만약 파일을 가리키는 파일 서술자라면, 그 파일에 내용을 쓰게 됩니다.)

아래에 2번 파일 서술자(표준 에러) 역시 1번과 비슷하게 출력을 해주는 파일 서술자입니다.
perror("~") 함수를 호출해보시면 쉽게 알 수 있습니다.



#include<stdlib.h> 헤더에 대한 설명을 빠뜨렸군요,
이 헤더파일은 프로세스와 관련된 함수들을 저장하는 헤더파일입니다.
(예를 들면 system(), fork(), exec류의 함수 등등..)
exit(0)도 그중에 하나구요, 프로세스를 종료하는 함수입니다. (return 0 과 동일)

FILE 게시물들은
begining Linux programing.
Linux 언쉬리드' 를 참고하였습니다.