본문 바로가기

CS/시스템 프로그래밍

[Linux] write 명령어 구현

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
        int fd;
        char buf[100];

        if(argc != 2)
        {
                fprintf(stderr, "usage: write0 ttyname\n");
                exit(1);
        }

        fd = open(argv[1], O_WRONLY);
        if (fd == -1)
        {
                perror(argv[1]);  // 오류 메시지를 stderr로 출력
                exit(1);

        }

        while(fgets(buf, 100, stdin) != NULL)
        {
                if(write(fd, buf, strlen(buf)) == -1)
                {
                        break;
                }
        }

        close(fd);
}

바로 전 게시글에서 tty를 알아보았다.

이 때 알아낸 터미널 파일에 write를 하면 그것이 터미널에 출력되는데 이를 통해 write 명령어를 직접 구현해볼 수 있따.

 

우선 fgets는 개행문자를 만나거나 읽은 문자수가 두번째 매개변수 - 1일 때까지 문자를 읽어서 buf에 저장한다.

이 때 마지막에는 null문자가 저장된다.

 

그리고 write함수는 fd에 버퍼의 내용을 strlen(buf)만큼 쓰므로

현재 터미널에 쓴 내용을 다른 터미널에 표시하는 프로그램을 짤 수 있다.

'CS > 시스템 프로그래밍' 카테고리의 다른 글

[Linux] kill(시스템 콜), 핸들러2  (0) 2022.10.27
[Linux] Signal Handler  (0) 2022.10.27
[Linux] 파일 시스템, inode  (0) 2022.10.27
[Linux] pwd, ln, find, grep  (0) 2022.10.27
[Linux] open, close, read, write  (0) 2022.10.26