putchar

Jan Scheuer Jan.Scheuer na snake.cz
Neděle Květen 3 20:29:39 CEST 1998


Nejsem si zcela jist zda muj problem patri do teto konference, presto:
Narazil jsem na nasledujicim potiz:
Potrebuji zajistit ovladani  programu zaslanim uzivatelskeho 
signalu, kde obsluha signalu nabije vstup programu a ten je pote precten.
Problem :putchar nereaguje na nabiti vstupu okamzite ale az po stisku 
klavesy. Nevi nekdo nahodou jak to resit?
Za pripadne ohlasy dekuji.

Priklad:
#include <stdio.h>
#include <signal.h>
void sig_10(int sig);

int main(void)
{
signal(10,sig_10);
printf("Posli mi signal 10\n");
printf("Prvni cteni main :%c:\n",getchar());
printf("Druhe cteni main :%c:\n",getchar());
printf("Treti cteni main :%c:\n",getchar());
/* 
  Cilem je v obsluze signalu naplnit vstupni zarizeni posloupnosti klaves,
  ktere vedou k ukonceni programu (bez pritomnosti obsluhy).
  Ale je tento problem:
  Proc az po stisku klavesy ? 
  (Pri nastaveni stty -icanon) Jinak je treba stisk enter
  Lze dosahnout toho aby getchar v main precetl podsunuty znak okamzite ?

  Getchar stoji ve funkci __read a ta asi nezjisti ze doslo ke zmene
  vstupu a proto necte. Pri stisku klavesy precte podstrceny znak a prave
  zadany znak se ztrati.( pri stty -icanon)

*/
return 0;
}


void sig_10(int sig)
{
signal(10,sig_10);
printf("\nObsluha signalu 10\n");
ungetc('a',stdin);
printf("Znak vracen do stdin a precten v obsluze signalu :%c:\n",getchar());
ungetc('b',stdin);
return;
}


Scheuer Jan
Jan.Scheuer na snake.cz
tel:0467/2336
fax:0467/521105



Další informace o konferenci Linux