Portál AbcLinuxu, 12. května 2025 06:33

Dotaz: Cecko under Linux

6.8.2003 08:21 Tomas
Cecko under Linux
Přečteno: 76×
Odpovědět | Admin
Zdravim,

potreboval bych poradit v Cecku, mam cyklus

while (podminka){

telo cyklu

}

potreboval bych aby se mi telo cyklu provadelo ta dlouho, dokud nezmackny klavesu ENTER, jak na to?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.8.2003 08:33 hesiod
Rozbalit Rozbalit vše Cecko under Linux
Odpovědět | | Sbalit | Link | Blokovat | Admin
Skuste sa pozriet na kniznicu ncurses(curses) - konsola. Este som to sice nikdy nepouzil, ale je tam funkcia getch(), ktora ked sa (podla manualu) vola v 'no-delay' mode(nastavenie funkciou nodelay(...) ) , tak vracia hodnotu ERR. Tymto by sa to mohlo dat otestovat ... . Pre uplnost dodavam odkazy na man stranky : man ncurses, man nodelay, man getch, ... . Hesiod
Josef Kufner avatar 6.8.2003 23:31 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Cecko under Linux
Odpovědět | | Sbalit | Link | Blokovat | Admin
skoukni systemove volani "select". Umi to co chces a jeste vic. (Ceka na aktivitu na nejakym desc. souboru (to co vraci open()) a umi taky timeout).
Hello world ! Segmentation fault (core dumped)
6.8.2003 23:53 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Cecko under Linux
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle je téměř doslovná kopie příkladu z info stránek libc. Řeší takové ty ,,drobnosti``, jako jestli je vstup fakt terminál a pod, jinak by to šlo jednodušeji.
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>

/* Use this variable to remember original terminal attributes. */
struct termios saved_attributes;

void
reset_input_mode(void)
{
  tcsetattr(STDIN_FILENO, TCSANOW, &saved_attributes);
}

void
set_input_mode(void)
{
  struct termios tattr;

  /* Make sure stdin is a terminal. */
  if (!isatty(STDIN_FILENO)) {
    fprintf(stderr, "Not a terminal.\n");
    exit(EXIT_FAILURE);
  }

  /* Save the terminal attributes so we can restore them later. */
  tcgetattr(STDIN_FILENO, &saved_attributes);
  atexit(reset_input_mode);

  /* Set the funny terminal modes. */
  tcgetattr(STDIN_FILENO, &tattr);
  tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
  tattr.c_cc[VMIN] = 0;
  tattr.c_cc[VTIME] = 0;
  tcsetattr(STDIN_FILENO, TCSAFLUSH, &tattr);
}

int
main(void)
{
  char c;
  long int i = 0;

  set_input_mode();
  puts("Press Enter");

  while (1) {
    read(STDIN_FILENO, &c, 1);
    if (c == '\n')          /* `Enter' */
      break;
    i++;
  }

  printf("i == %ld\n", i);

  return EXIT_SUCCESS;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.