komplikace v C

Zdravim, vyzkošel jsem jeden fígl, který jsem viděl na http://ou800doc.caldera.com/en/SDK_sysprog/_TTY_in_Raw_Mode.html .


 1  #include <termio.h>
 2
 3  extern struct termio old_term;
 4
 5  setup2(fid)
 6  int fid;
 7  {
 8        struct termio new_term;
 9
10       if (ioctl(fid, TCGETA, &old_term) == -1)
11        {
12                printf("ioctl get failed.\n");
13                exit(1);
14        }
15
16        new_term = old_term;
17        new_term.c_lflag &= ~ICANON;
18        new_term.c_cc[VMIN] = 0;
19        new_term.c_cc[VTIME] = 0;
20
21        if (ioctl(fid, TCSETA, &new_term) == -1)
22        {
23                printf("ioctl set failed.\n");
24                exit(1);
25        }
26  }

Konkrétně by měl tento kód změnit chování konzole, jenže se to ani nezkompiluje. :frowning:

gcc -o Milionar milionar.c
milionar.c: In function ‘setup2’:
milionar.c:13: warning: incompatible implicit declaration of built-in function ‘exit’
milionar.c:24: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cccFMVYM.o: In function `setup2':
milionar.c:(.text+0xa): undefined reference to `old_term'
milionar.c:(.text+0x3f): undefined reference to `old_term'
milionar.c:(.text+0x47): undefined reference to `old_term'
milionar.c:(.text+0x4f): undefined reference to `old_term'
milionar.c:(.text+0x57): undefined reference to `old_term'
/tmp/cccFMVYM.o:milionar.c:(.text+0x61): more undefined references to `old_term' follow
collect2: ld returned 1 exit status
make: *** [Milionar] Error 1

Potřeboval bych poradit, v čem je problém. Tážu se zde, protože mi to přijde jako systémová záležitost.

Tedy nevim jake jsou vase zkusenosti s programovanim, ale v podstate vsechny chyby prekladace jsou jaksi samovysvetlujici. V termio.h ktere jedine prilikovavate zadna strukture old_term definovana neni.
Jesli dobre vidim je ten kod z roku 2004 a navic pro unixware.

covex napsal(a):

v podstate vsechny chyby
prekladace jsou jaksi samovysvetlujici.

Zvláštní, mi naopak připadá, že chybové hlášky překladače jsou jaksi otázkami sami pro sebe.

V termio.h
ktere jedine prilikovavate zadna strukture
old_term definovana neni.

To jsem si sice také přečetl, ale připadá mi to jako záhada. Má to znamenat, že hlavičkový soubor termio.h je neúplný, nebo že každý termio.h je jiný v závislosti na použitém OS nebo překladači?

Jesli dobre vidim je ten kod z roku 2004

ikspečka byla vydána mnohem dříve a stále je to majoritní OS.

a navic pro unixware.

Myslel jsem, že to je pro všechny systémy na bázi POSIX, tedy i pro Linux.

Nevim nakolik jsou definovany v POSIXu hlavicky pro termio, ale ano, jsou a ne jen ony, systemove zavisle.

Tak si to zkuste prelozit v XPckach :).