ostep-utility : wcat 명령어 구현

2022. 3. 11. 01:42컴퓨터 공학/운영체제

반응형

본 티스토리 블로그는 PC 환경에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

 

ICMP의 블로그 : 네이버 블로그

사이버 보안에 관심이 많은 ICMP입니다. 우리 서로 보안에 관한 다양한 주제로 이야기를 나누어 봅시다.

blog.naver.com

 

 

운영체제 명령어 cat을 구현해 보도록 하겠습니다.

(본 사이트에서는 wcat이라고 이름을 지었으므로 이 이름으로 따라가겠습니다.)

 

해당 명령어가 처리해야 할 기능과 예외 처리 부분은 아래 링크에 모두 설명되어 있으며, unix에서 구현된 명령어와는 다른 부분이 존재합니다.

위 깃허브에서 제공하는 test case 검사를 모두 통과해야 정확히 구현된 것입니다.

 

1) ./wcat tests/1.in

입력된 파일 경로를 인자로 접근하여 기본 출력이 가능한지 확인하는 케이스입니다.

 

2) ./wcat tests/2.in.a tests/2.in.b

다중 파일 경로가 입력되어도 정상적으로 처리가 가능한지 확인하는 케이스입니다.

 

3) ./wcat tests/3.in

해당 파일 내부가 공백이어도 정상적인 처리가 가능한지 확인합니다.

 

4) ./wcat

아무 인자가 없이 명령어만 실행했을때의 예외 처리가 되어있는지를 확인하는 부분입니다.

 

5) ./wcat tests/5.in

파일에 저장된 정보가 매우 길어도 정상적으로 표준 출력 처리가 되는지 확인하는 케이스입니다.

 

6) ./wcat tests/6.in

존재하지 않는 경로의 파일을 접근할 경우 직접 에러코드를 선언하고 출력할 수 있는지 확인하는 부분입니다.

 

7) ./wcat tests/7a.in tests/7b.in tests/7c.in tests/7d.in

다중파일 출력이 정상적으로 이루어지는지 확인하는 최종 루틴입니다.

 

아래는 각각의 부분을 고려해서 제작된 코드입니다.

#include <stdio.h>
#include <errno.h>
#define MAX_LEN 256

int main(int argc, char* argv[]){
    FILE* FD;
    char contents[MAX_LEN];
    
    //1. if no input argument in main
    if(argc == 1) 
        return 0;
    
    for(int i=1; i < argc; i++){
        FD = fopen(argv[i], "r");
        
        if(FD == NULL){ 
            //2. error num : ENOENT(2) : no such file or directory.
            if(errno == ENOENT) 
                printf("wcat: cannot open file\n");

            return 1;
        }

        while( !feof(FD)){ //3. End-of-File indicator
            if(!fgets(contents, MAX_LEN , FD))
                break;
                
            printf("%s", contents);
        }
        fclose(FD);
    }
    return 0;
}
 
 

- 성공 화면

 

반응형