stdout에 쓰기(출력 리디렉션 제외) C

stdout에 쓰기(출력 리디렉션 제외) C

학교에서 사용할 간단한 앱을 만들어야 해요.

터미널에 한 줄에 하나의 인수를 작성하고 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_FILENOor 대신 이것을 사용할 수 있습니다 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.

관련 정보