'Programming/Linux System'에 해당되는 글 2건

  1. 2010.07.07 리눅스에서의 cat을 직접 구현해 보자
  2. 2010.07.07 리눅스에서의 래핑 함수 기법
2010. 7. 7. 10:01

리눅스에서는 화일을 열어볼 수 있는 명령어가 cat이 있다.
이 명령어를 직접 구현해보자.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int argc, char** argv)
{
        char ch;
        int fd;

        if ( argc != 2 )                                                // 입력받을 인자에 대한 에러 처리.
        {
                printf( "argument error\n" );
                printf( " usage : ./test.out filename\n");    // 사용법을 출력해준다.
                exit( -1 );
        }
        
        fd = open(argv[1], O_RDONLY );  // 읽기 전용을 파일을 연다.

        while( read( fd, &ch, 1 ) )
                write( 1, &ch, 1 );                // 첫번째 인자 1번은 표준출력이다. 즉 모니터와 연결되어있다.
                                                        // ch를 1바이트씩 읽어서 모니터에 출력하라는 뜻이다.
                                                        // 성공시 쓰여진 바이트 수를 반환하고 쓰여진 것이 없으면 0을 반환한다.
                                                        // 에러일 경우 -1을 반환한다.

        close(fd);
        return 0;
}

'Programming > Linux System' 카테고리의 다른 글

리눅스에서의 래핑 함수 기법  (0) 2010.07.07
Posted by 어북어위크
2010. 7. 7. 10:00

리눅스에서 시스템 함수인 open()을 직접쓰지 않고 wrapping을 해서 쓰는 기법이다.
wrapping기법을 사용함으로써 main() 함수에서는 한줄로 에러처리까지 간단하게 처리할 수 있다.

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>    // extern int errno; 의 선언부.

// 에러 처리.
void err_quit( char* msg )
{
    perror( msg );
    exit(-1);
}

// 시스템 함수의 open함수를 래핑.
int Open( char* fname, int flag )
{
     int fd;
     if ( ( fd = open(fname, flag )) < 0 ) // 열기와생성은 에러가 나면 새로운 파일 디스크립터를 반환하거나 -1을 반환한다.
         err_quit("open()");
  
    return fd;
}

int main()
{
     int fd;
     fd = Open( "xxx", O_RDONLY );        // 여기서 fd값이 넘어왔으면 에러가 없음을 뜻한다.   
                                                         // 에러가 있을 경우 에러 메세지를 뿌려주고 바로 끝나게 된다.
}

'Programming > Linux System' 카테고리의 다른 글

리눅스에서의 cat을 직접 구현해 보자  (0) 2010.07.07
Posted by 어북어위크