#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 |