리눅스

cat 명령과 유사한 기능을 수행하는 c프로그램 (open(), read(), write(), close()를 사용한)

저긍 2024. 9. 21. 00:07
반응형

특수문자 <, >, >> 처리 생략.

 

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 1024

int main(int argc, char *argv[]) {
    int fd;
    char buf[BUF_SIZE];
    ssize_t num_of_read;
    if (argc == 1) {
        while ((num_of_read= read(STDIN_FILENO, buf, BUF_SIZE)) > 0) {
            write(STDOUT_FILENO, buf, num_of_read);
        }
    } else {
        for (int i = 1; i < argc; i++) {
            fd = open(argv[i], O_RDONLY);
            if (fd == -1) {
                perror("Can not open this file...");
                return 1;
            }
            while ((num_of_read= read(fd, buf, BUF_SIZE)) > 0) {
                write(STDOUT_FILENO, buf, num_of_read);
            }
            close(fd);
        }
    }
    return 0;
}

$> vi mycat_1.c

$> gcc mycat_1.c o mycat_1

$> ls

mycat_1 mycat_1.c

 

for문을 사용하여, 여러개의 파일도 읽을 수 있다.

표준 입력을 표준 출력한다.

 

 

 

반응형