리눅스에서 콘솔 입력시에 리턴키를 누르지 않아도 처리되는방법

hansomeok의 이미지

리눅스 에서 콘솔 프로그램 작성할때 getchar()이나 scanf()로 키를 입력받을시에
LF문자 처리때문에 골치가 아픕니다
콘솔에서 키 입력 받을때 키를 눌고 엔터를 누르지 않아도 바로 키입력이 처리되는
루틴을 작성하고 싶은데 어떡해야 하나요?
예를 들어서 "y 또는 n으로 입력해주세요"라고 띄운다음 y나 n키를 누르고 엔터를
치지 않아도 y를 누르면 바로 다음 루틴이 실행될수 있게요..

ssehoony의 이미지

헉...
설마 getch() 를 모르셔서? 질문 하신건가요?

kslee80의 이미지

리눅스 콘솔에서 표준함수로 그런 역할을 해 주는 함수는 없습니다.
curses 라이브러리에 포함된 getch() 라는 함수가 원하시는 것을
제공하긴 합니다.
자세한건 curses 라이브러리를 살펴보시는 것이 좋을듯 싶습니다.
UNIX System Programming 이라는 책에도 이 curses 에 대해서
간략하게 설명된 부분이 있죠..

sunyzero의 이미지

man termios 를 치시고 거기서 비정규입력(non canonical input)에 대해서 살펴보시기 바랍니다. 일반적으로 몇몇 프로그램에서 정규입력보다 비정규입력을 사용해야 하는 특별한 경우에 사용됩니다. 간단하게 struct termios를 통해서 구현할 수 있습니다. 흠... 시간도 있으니.. 간단하게 하나 예를 드리면 아래처럼 터미널을 제어해서 쉽게 해결할 수 있죠. 아 참 원래는 getc 대신 read로 구현하는게 원래는 좋습니다. 그래야 여러개의 문자를 처리가능하니까요.

    char input;
    struct termios  term_cc, old_cc;

    tcgetattr(0, &term_cc);
    old_cc = term_cc; /* 현재 설정 기억 */
    term_cc.c_cc[VMIN] = 1; /* 최소 입력 요구 문자수 */
    term_cc.c_cc[VTIME] = 50; /* 5초 기다림 */
    term_cc.c_lflag &= ICANON; /* 비정규입력 */
    term_cc.c_lflag &= ~ECHO; /* 반향 금지 */
    tcsetattr(0, TCSANOW, &term_cc);
    input = (int) getc(stdin);
    printf("Your input : %c\n", input);
    tcsetattr(0, TCSANOW, &old_cc);

========================================
* The truth will set you free.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.