/* mycat program, by mjson. jinn_o@naver.com */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#define MAX_BUF 64
int main(int argc,char *argv[])
{
int fd,read_size,write_size;
char buf[MAX_BUF];
if(argc!=2){
printf("USAGE: %s file_name\n",argv[0]);
exit(-1);
}
fd=open(argv[1],O_RDONLY);
if(fd<0){
// open error handling
}
while(1){
read_size=read(fd,buf,MAX_BUF)'
if(read_size==0)
break;
write_size=write(STDOUT_FILENO,buf,read_size);
}
close(fd);
}
일반적으로 시스템 콜이 실패할 경우 그 원인을 나타내는 정수가 전역변수 errno에 설정된다. errno는 'Error Number(No)'의 약자다. errno에는 파일이 존재하지 않을 때 발생하는 ENOENT나, 인자의 값이 올바르지 않을 때 발생하는 ELNVAL 등의 값이 대입된다. 각 시스템 콜을 사용할 때 발생할 가능성이 있는 errno 값은 man 페이지에서 확인할 수 있다.
'컴퓨터 공학 > 시스템 프로그래밍' 카테고리의 다른 글
[LPI 실습] 새로운 파일 만드는 명령어 만들기 (0) | 2021.10.10 |
---|---|
[LPI 실습] cat 명령어 직접 만들어보기(2) do_cat() (0) | 2021.10.10 |
[LPI 실습] write() 시스템 콜 직접 사용해보기 (0) | 2021.10.10 |
[LPI 실습] read() 시스템 콜 직접 사용해보기 (0) | 2021.10.10 |
[리눅스 프로그래밍] 스트림 stream (0) | 2021.10.10 |