나는 팔로우한다여기.
나는 이 시점에서 다음과 같은 사실을 발견했습니다(완전하지는 않으며 단지 시연용임).
#include <termios.h>
raw.c_iflag &= ~(ICRNL | IXON);
raw.c_oflag &= ~(OPOST);
raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
다음과 같이 만드세요:
printf("\n");
커서를 처음으로 이동하지 않고 다음 줄로 넘어갑니다. 텍스트에서는 \n
일반적으로 번역되어 비활성화된다고 \r\n
설명 합니다 OPOST
.
관련하여 이 ICNRL
플래그를 사용하면 ^M
터미널이 캐리지 리턴(통과)을 올바르게 수신할 수 있습니다.
매뉴얼은 영감을 주지 않습니다:
OPOST는 구현 정의 출력 처리를 가능하게 합니다.
누군가 역사와 여기서 무슨 일이 일어나고 있는지 더 자세히 설명해 줄 수 있습니까?
그렇다면 파일의 16진 덤프를 가져올 때 어떻게 \n
단일 바이트가 될 수 있습니까? "자동 번역"은 \r\n
실제로 텍스트의 바이트를 대상으로 하는 것이 아니라 순전히 보기를 기반으로 수행됩니까?
답변1
이 질문에 대한 자세한 답변은 튜토리얼에서 확인할 수 있습니다.모든 출력 처리 끄기
터미널은 출력 측에서도 유사한 변환을 수행하는 것으로 나타났습니다. 이는 우리가 인쇄하는 모든 개행 문자("\n")를 개행 문자("\r\n")가 뒤에 오는 캐리지 리턴 문자로 변환합니다. 터미널에서 새 텍스트 줄을 시작하려면 이 두 문자가 필요합니다. 캐리지 리턴 문자는 커서를 현재 줄의 시작 부분으로 다시 이동시키고 줄 바꿈 문자는 커서를 한 줄 아래로 이동하여 필요한 경우 화면을 스크롤합니다. (이 두 가지 다른 작업은 타자기와 텔레타이프라이터 시대에 유래되었습니다.)
귀하의 질문에 직접 답변하려면,
그렇다면 파일의 16진수 덤프를 수행할 때 \n이 단일 바이트인 이유는 무엇입니까? \r\n에 대한 "자동 번역"은 실제로 텍스트의 바이트를 대상으로 하는 것이 아니라 뷰 기반으로만 수행됩니까?
예. 터미널로 전송되면 각 인스턴스는 \n
터미널 회선 규칙에 따라 변환됩니다. \r\n
이 플래그를 사용하여 사후 처리를 끌 수 있습니다 opost
. 셸 수준에서는 다음을 통해 관리할 수 있습니다.stty
stty -opost # Turn off "opost" processing
ls # Notice you get a ladder effect due to there being no CR actions
stty opost # Restore "opost" processing
시도해 볼 예정이라면 stty
현재 상태를 저장하여 나중에 복원할 수 있다는 점을 알아 두는 것이 좋습니다.
g=$(stty -g) # Save current state
stty raw # Interesting times ahead
…
stty $g # Follow this with « Ctrl j » rather than « Enter »
이것을 사용하면 bash
명령줄 편집(GNU)을 제공하므로 예상대로 작동하지 않습니다 readline
. 다른 셸(예: dash
( )) 에 넣으면 sh
실제 효과를 볼 수 있습니다.