학교에서 사용할 간단한 앱을 만들어야 해요.
터미널에 한 줄에 하나의 인수를 작성하고 stdout에서 사용자 선택을 반환해야 합니다.
cat my_app main.c main.h
예를 들어 사용자가 선택하면 cat으로 main.c
돌아간다고 씁니다 main.c
. 문제는 stdout(일명 STDOUT_FILENO)에 메뉴를 작성하면 로 반환된다는 것입니다 cat
. STDERR에 메뉴를 작성할 수는 있지만 약간 보기 흉합니다.
/dev/tty*
나는 또는 같은 장치/파일을 사용하는 방법을 잘 모르지만 /dev/pty*
STDOUT 또는 STDERR에 쓸 필요 없이 터미널에 무언가를 쓰는 데 사용할 수 있을 것 같습니다.
기본적으로 터미널(STDOUT, STDERR, MYOUT)에 표시될 새 출력을 열고 싶습니다.
제가 제대로 설명했는지 모르겠습니다.
답변1
대화형 애플리케이션을 구축하려면 /dev/tty
제어 터미널에 파일 설명자를 반환하는 를 열 수 있습니다.
int ttyfd = open("/dev/tty", O_RDWR);
STDIN_FILENO
or 대신 이것을 사용할 수 있습니다 STDOUT_FILENO
(프로그램이 시작되면 터미널이 아닌 다른 위치로 리디렉션될 수 있습니다).
여기 몇 가지 예가 있어요.
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
int ttyfd = open("/dev/tty", O_RDWR);
printf("fd: %d\n", ttyfd);
write(ttyfd, "hello tty!\n", 11);
return 0;
}
호출되면 ./test >out
터미널에 안녕하세요 메시지와 파일 fd: 3
의 유사한 내용을 인쇄해야 합니다 out
.