한 파일 설명자에서 tty 설정을 변경하면 다른 파일 설명자에 영향을 미치는 이유는 무엇입니까?

한 파일 설명자에서 tty 설정을 변경하면 다른 파일 설명자에 영향을 미치는 이유는 무엇입니까?

ECHO기본적으로 stdin 및 stdout에서는 설정이 활성화되어 있습니다. 그런데 왜 stdin을 비활성화하면 ECHOstdin에서도 비활성화되는 걸까요 stdout? 그들은 두 개의 별도 설명자를 가지고 있는데 0, 1왜 그들은 하나의 동일한 파일 설명자가 있는 것처럼 동시에 변경됩니까?

다음 프로그램은 이를 보여줍니다.

#include <termios.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
  struct termios tty_stdin;
  struct termios tty_stdin_restore;
  struct termios tty_stdout;
  tcgetattr(STDIN_FILENO, &tty_stdin);
  tcgetattr(STDIN_FILENO, &tty_stdin_restore);

  /* disable echo on stdin */
  tty_stdin.c_lflag &= (tcflag_t) ~ECHO;
  tcsetattr(STDIN_FILENO, TCSANOW, &tty_stdin);

  /* observe that it was automatically disabled on stdout */
  tcgetattr(STDOUT_FILENO, &tty_stdout);
  printf("STDOUT ECHO after changing STDIN: %d\n", tty_stdout.c_lflag & ECHO ? 1 : 0);

  tcsetattr(STDIN_FILENO, TCSANOW, &tty_stdin_restore);
  return 0;
}

답변1

파일 설명자가 아닌 장치의 속성을 변경하고 있습니다. 파일 설명자는 말하는 장치를 식별하는 방법일 뿐입니다. 예를 들어 stdin과 stdout이 모두 동일한 tty인 경우 /dev/pts/0및 중 어느 것이 사용되는지는 중요하지 않습니다.tcgetattrtcsetattr

정의에 따라 에코는 입력과 출력을 포함하므로 입력에는 에코를 활성화하고 출력에는 활성화하지 않거나 그 반대의 경우가 무엇을 의미하는지 상상하기 어렵습니다. tty 드라이버가 에코할 수도 있고 그렇지 않을 수도 있습니다. 어떤 방식으로든 에코의 동작을 수정하는 것과 관련된 목표를 염두에 두고 있습니까? 그렇다면 달성하고 싶은 것이 무엇인지 알려주십시오. 그러면 누군가가 이를 올바르게 수행하는 방법을 알게 될 것입니다.

관련 정보