table of contents
termios(3) | Library Functions Manual | termios(3) |
NUME¶
obține și definește atributele terminalului, controlul liniei, obține și definește rata de transmisie în baud
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <termios.h> #include <unistd.h>
int tcgetattr(int fd, struct termios *termios_p); int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);
int tcsendbreak(int fd, int duration); int tcdrain(int fd); int tcflush(int fd, int queue_selector); int tcflow(int fd, int action);
void cfmakeraw(struct termios *termios_p);
speed_t cfgetispeed(const struct termios *termios_p); speed_t cfgetospeed(const struct termios *termios_p);
int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); int cfsetspeed(struct termios *termios_p, speed_t speed);
cfsetspeed(), cfmakeraw():
Începând cu glibc 2.19:
_DEFAULT_SOURCE
glibc 2.19 și versiunile anterioare:
_BSD_SOURCE
DESCRIERE¶
Funcțiile termios descriu o interfață generală de terminal care este furnizată pentru a controla porturile de comunicații asincrone.
Structura termios¶
Multe dintre funcțiile descrise aici au un argument termios_p care este un indicator către o structură termios. Această structură conține cel puțin următorii membri:
tcflag_t c_iflag; /* moduri de intrare */ tcflag_t c_oflag; /* moduri de ieșire */ tcflag_t c_cflag; /* moduri de control */ tcflag_t c_lflag; /* moduri locale */ cc_t c_cc[NCCS]; /* caractere speciale */
Valorile care pot fi atribuite acestor câmpuri sunt descrise mai jos. În cazul primelor patru câmpuri de tip mască de biți, definițiile unora dintre fanioanele asociate care pot fi activate sunt expuse numai dacă este definită o macroinstrucțiune specifică de testare a caracteristicilor (a se vedea feature_test_macros(7)), după cum se menționează în paranteze („[]”).
În descrierile de mai jos, „nu există în POSIX” înseamnă că valoarea nu este specificată în POSIX.1-2001, iar „XSI” înseamnă că valoarea este specificată în POSIX.1-2001 ca parte a extensiei XSI.
Constantele fanionului c_iflag:
- IGNBRK
- Ignoră condiția BREAK de la intrare.
- BRKINT
- Dacă IGNBRK este activat, un BREAK este ignorat. Dacă nu este activat, dar BRKINT este activat, atunci un BREAK determină golirea cozilor de intrare și ieșire și, dacă terminalul este terminalul de control al unui grup de procese în prim plan, va determina trimiterea unui semnal SIGINT către acest grup de procese în prim plan. Atunci când nici IGNBRK, nici BRKINT nu sunt activate, un BREAK este citit ca un octet nul ('\0'), cu excepția cazului în care PARMRK este activat, caz în care este citit ca secvența \377 \0 \0.
- IGNPAR
- Ignoră erorile de încadrare și de paritate.
- PARMRK
- Dacă acest bit este activat, octeții de intrare cu erori de paritate sau de încadrare sunt marcați atunci când sunt transferați către program. Acest bit este semnificativ numai atunci când INPCK este activat și IGNPAR nu este activat. Modul în care sunt marcați octeții eronați este cu doi octeți precedenți, \377 și \0. Astfel, programul citește de fapt trei octeți pentru un octet eronat primit de la terminal. Dacă un octet valid are valoarea \377, iar ISTRIP (vezi mai jos) nu este activat, programul îl poate confunda cu prefixul care marchează o eroare de paritate. Prin urmare, un octet valid \377 este transmis programului ca doi octeți, \377 \377, în acest caz.
- Dacă nu este activat nici IGNPAR, nici PARMRK, citește un caracter cu o eroare de paritate sau o eroare de încadrare ca \0.
- INPCK
- Activează verificarea parității de intrare.
- ISTRIP
- Îndepărtează al optulea bit.
- INLCR
- Traduce NL în CR la intrare.
- IGNCR
- Ignoră returul de cărucior la intrare.
- ICRNL
- Transformă returul de cărucior în linie nouă la intrare (cu excepția cazului în care IGNCR este activat).
- IUCLC
- (nu există în POSIX) Transformă caracterele majuscule în caractere minuscule la intrare.
- IXON
- Activează controlul fluxului XON/XOFF de la ieșire.
- IXANY
- (XSI) Tastarea oricărui caracter va reporni ieșirea oprită. (Valoarea implicită este de a permite doar caracterului START să repornească ieșirea.)
- IXOFF
- Activează controlul fluxului XON/XOFF de la intrare.
- IMAXBEL
- (nu există în POSIX) Sună un clopoțel atunci când coada de intrare este plină. Linux nu implementează acest bit și acționează ca și cum ar fi întotdeauna activat.
- IUTF8 (începând cu Linux 2.6.4)
- (nu există în POSIX) Intrarea este UTF8; acest lucru permite ca ștergerea caracterelor să fie efectuată corect în modul procesat.
Constantele fanionului c_oflag:
- OPOST
- Activează procesarea de la ieșire definită de implementare.
- OLCUC
- (nu există în POSIX) Transformă caracterele în minuscule în majuscule la ieșire.
- ONLCR
- (XSI) Traduce NL în CR-NL la ieșire.
- OCRNL
- Traduce CR la NL la ieșire.
- ONOCR
- Nu se emite CR la coloana 0.
- ONLRET
- Se presupune că caracterul NL îndeplinește funcția de retur de cărucior; ideea nucleului cu privire la coloana curentă este că aceasta este stabilită la 0 atât după NL, cât și după CR.
- OFILL
- Trimite caractere de umplere pentru o întârziere, în loc să folosească o întârziere temporizată.
- OFDEL
- Caracterul de umplere este ASCII DEL (0177). Dacă nu este definit, caracterul de umplere este ASCII NUL ('\0'). (Nu este implementat pe Linux.)
- NLDLY
- Mască de întârziere a liniei noi. Valorile sunt NL0 și NL1. [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
- CRDLY
- Mască de întârziere a returului de cărucior. Valorile sunt CR0, CR1, CR2 sau CR3. [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
- TABDLY
- Mască de întârziere a tabulatorului orizontal. Valorile sunt TAB0, TAB1, TAB2, TAB3 (sau XTABS, dar consultați secțiunea ERORI). O valoare de TAB3, adică XTABS, extinde tabulatoarele la spații (cu opriri de tabulare la fiecare opt coloane). [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
- BSDLY
- Mască de întârziere a backspace-urilor. Valorile sunt BS0 sau BS1. (Nu a fost niciodată implementat.) [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
- VTDLY
- Mască de întârziere a tabulatorului vertical. Valorile sunt VT0 sau VT1.
- FFDLY
- Mască de întârziere a avansului de pagină (saltul de pagină). Valorile sunt FF0 sau FF1 [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
Constantele fanionului c_cflag:
- CBAUD
- (nu există în POSIX) Masca vitezei în baud (4+1 biți). [necesită _BSD_SOURCE sau _SVID_SOURCE]
- CBAUDEX
- (nu există în POSIX) Mască suplimentară de viteză baud (1 bit), inclusă în CBAUD. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- (POSIX spune că viteza de baud este stocată în structura termios fără a specifica unde anume, și oferă cfgetispeed() și cfsetispeed() pentru a ajunge la ea. Unele sisteme utilizează biții selectați de CBAUD în c_cflag, alte sisteme utilizează câmpuri separate, de exemplu, sg_ispeed și sg_ospeed).
- CSIZE
- Mască pentru dimensiunea caracterelor. Valorile sunt CS5, CS6, CS7 sau CS8.
- CSTOPB
- Stabilește doi biți de stop, în loc de unul.
- CREAD
- Activează receptorul.
- PARENB
- Activează generarea parității la ieșire și verificarea parității la intrare.
- PARODD
- Dacă este activată, atunci paritatea pentru intrare și ieșire este impară; în caz contrar, este utilizată paritatea pară.
- HUPCL
- Coboară liniile de control ale modemului după ce ultimul proces închide dispozitivul (hang up).
- CLOCAL
- Ignoră liniile de control ale modemului.
- LOBLK
- (nu există în POSIX) Blochează ieșirea de la un strat de shell care nu este curent. Pentru utilizare de către shl (straturi shell). (Nu este implementat în Linux.)
- CIBAUD
- (nu există în POSIX) Mască pentru vitezele de intrare. Valorile pentru biții CIBAUD sunt aceleași cu valorile pentru biții CBAUD, biții IBSHIFT deplasați la stânga. [necesită _BSD_SOURCE sau _SVID_SOURCE] (Neimplementat în glibc, acceptat pe Linux prin ioctls TCGET* și TCSET*; a se vedea ioctl_tty(2))
- CMSPAR
- (nu există în POSIX) Utilizarea parității „stick” (marcaj/spațiu) (acceptată pe anumite dispozitive seriale): dacă PARODD este activat, bitul de paritate este întotdeauna 1; dacă PARODD nu este activat, atunci bitul de paritate este întotdeauna 0. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- CRTSCTS
- (nu există în POSIX) Activează controlul fluxului RTS/CTS (hardware). [necesită _BSD_SOURCE sau _SVID_SOURCE]
Constantele fanionului c_lflag:
- ISIG
- Când se primește oricare dintre caracterele INTR, QUIT, SUSP sau DSUSP, generează semnalul corespunzător.
- ICANON
- Activează modul canonic (descris mai jos).
- XCASE
- (nu există în POSIX; nu este acceptat în Linux) Dacă ICANON este de asemenea activat, terminalul este numai cu majuscule. Intrarea este convertită în minuscule, cu excepția caracterelor precedate de \. La ieșire, caracterele majuscule sunt precedate de \, iar caracterele minuscule sunt convertite în majuscule. [necesită _BSD_SOURCE sau _SVID_SOURCE sau _XOPEN_SOURCE]
- ECHO
- Afișează caracterele de intrare.
- ECHOE
- Dacă ICANON este de asemenea activat, caracterul ERASE șterge caracterul de intrare precedent, iar WERASE șterge cuvântul precedent.
- ECHOK
- Dacă ICANON este de asemenea activat, caracterul KILL șterge linia curentă.
- ECHONL
- Dacă ICANON este, de asemenea, activat, redă caracterul NL chiar dacă ECHO nu este activat.
- ECHOCTL
- (nu există în POSIX) Dacă ECHO este de asemenea activat, caracterele speciale ale terminalului, altele decât TAB, NL, START și STOP, sunt redate ca ^X, unde X este caracterul cu codul ASCII 0x40 mai mare decât caracterul special. De exemplu, caracterul 0x08 (BS) este redat ca ^H. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- ECHOPRT
- (nu există în POSIX) Dacă ICANON și ECHO sunt de asemenea activate, caracterele sunt imprimate în timp ce sunt șterse. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- ECHOKE
- (nu există în POSIX) Dacă ICANON este de asemenea activat, KILL este reluat prin ștergerea fiecărui caracter de pe linie, conform specificațiilor ECHOE și ECHOPRT. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- DEFECHO
- (nu există în POSIX) Echo numai atunci când un proces citește. (Nu este implementat în Linux.)
- FLUSHO
- (nu există în POSIX; nu este acceptat în Linux) Ieșirea este eliminată. Acest fanion este activat prin tastarea caracterului DISCARD. [necesită _BSD_SOURCE sau _SVID_SOURCE]
- NOFLSH
- Dezactivează golirea cozilor de intrare și ieșire la generarea semnalelor pentru caracterele INT, QUIT și SUSP.
- TOSTOP
- Trimite semnalul SIGTTOU către grupul de procese al unui proces din fundal care încearcă să scrie la terminalul său de control.
- PENDIN
- (nu există în POSIX; nu este acceptat în Linux) Toate caracterele din coada de intrare sunt reimprimate atunci când este citit următorul caracter. (bash(1) gestionează în acest fel „typeahead”). [necesită _BSD_SOURCE sau _SVID_SOURCE]
- IEXTEN
- Activează procesarea de intrare definită de implementare. Acest fanion, precum și ICANON trebuie să fie activate pentru ca caracterele speciale EOL2, LNEXT, REPRINT, WERASE să fie interpretate și pentru ca fanionul IUCLC să fie eficient.
Matricea c_cc definește caracterele speciale ale terminalului. Indicii simbolici (valorile inițiale) și semnificația lor sunt:
- VDISCARD
- (nu există în POSIX; nu este acceptat în Linux; 017, SI, Ctrl-O) Comută: începe/încetează să elimine ieșirea în așteptare. Recunoscut atunci când IEXTEN este activat, iar apoi nu este transmis ca intrare.
- VDSUSP
- (nu există în POSIX; nu este acceptat în Linux; 031, EM, Ctrl-Y) Caracter de suspendare întârziată (DSUSP): trimite semnalul SIGTSTP atunci când caracterul este citit de programul utilizatorului. Recunoscut atunci când IEXTEN și ISIG sunt activate, iar sistemul utilizează funcția de control al lucrărilor, iar apoi nu este transmis ca intrare.
- VEOF
- (004, EOT, Ctrl-D) Caracter de sfârșit de fișier (EOF). Mai exact: acest caracter face ca memoria tampon tty în așteptare să fie trimisă programului utilizator în așteptare, fără a aștepta sfârșitul de linie. Dacă este primul caracter al liniei, read(2) din programul utilizator returnează 0, ceea ce înseamnă sfârșit de fișier. Recunoscut atunci când ICANON este activat, iar apoi nu este transmis ca intrare.
- VEOL
- (0, NUL) Caracter suplimentar de sfârșit de linie (EOL). Recunoscut atunci când ICANON este activat.
- VEOL2
- (nu există în POSIX; 0, NUL) Încă un caracter de sfârșit de linie (EOL2). Recunoscut atunci când ICANON este activat.
- VERASE
- (0177, DEL, rubout, sau 010, BS, Ctrl-H, sau de asemenea #) Sterge caracterul (ERASE). Acesta șterge caracterul anterior care nu a fost încă șters, dar nu șterge după EOF sau începutul de linie. Recunoscut atunci când ICANON este activat, iar apoi nu este transmis ca intrare.
- VINTR
- (003, ETX, Ctrl-C, sau de asemenea 0177, DEL, rubout) Caracter de întrerupere (INTR). Trimite un semnal SIGINT. Recunoscut atunci când ISIG este activat, iar apoi nu este transmis ca intrare.
- VKILL
- (025, NAK, Ctrl-U sau Ctrl-X, sau, de asemenea, @) Caracter de anulare (KILL). Acesta șterge intrarea de la ultimul EOF sau început de linie. Recunoscut atunci când ICANON este activat, iar apoi nu este transmis ca intrare.
- VLNEXT
- (nu există în POSIX; 026, SYN, Ctrl-V) Literal next (LNEXT). Introduce între ghilimele următorul caracter de intrare, privându-l de o posibilă semnificație specială. Recunoscut atunci când IEXTEN este activat, iar apoi nu este transmis ca intrare.
- VMIN
- Numărul minim de caractere pentru citirea noncanonică (MIN).
- VQUIT
- (034, FS, Ctrl-\) Caracter de ieșire (QUIT). Trimite semnalul SIGQUIT. Recunoscut atunci când ISIG este activat, iar apoi nu este transmis ca intrare.
- VREPRINT
- (nu există în POSIX; 022, DC2, Ctrl-R) Reimprimă caracterele necitite (REPRINT). Recunoscut atunci când ICANON și IEXTEN sunt activate, iar apoi nu este transmis ca intrare.
- VSTART
- (021, DC1, Ctrl-Q) Caracter de pornire (START). Repornește ieșirea oprită de caracterul Stop. Recunoscut atunci când IXON este activat, iar apoi nu este transmis ca intrare.
- VSTATUS
- (nu există în POSIX; nu este acceptat în Linux; cerere de stare: 024, DC4, Ctrl-T). Caracter de stare (STATUS). Afișează informații de stare la terminal, inclusiv starea procesului din prim-plan și cantitatea de timp CPU pe care a consumat-o. De asemenea, trimite un semnal SIGINFO (nu este acceptat în Linux) către grupul de procese din prim-plan.
- VSTOP
- (023, DC3, Ctrl-S) Caracter de oprire (STOP). Oprește ieșirea până la tastarea caracterului Start. Recunoscut atunci când IXON este activat, iar apoi nu este transmis ca intrare.
- VSUSP
- (032, SUB, Ctrl-Z) Caracter de suspendare (SUSP). Trimite semnalul SIGTSTP. Recunoscut atunci când ISIG este activat, iar apoi nu este transmis ca intrare.
- VSWTCH
- (nu există în POSIX; nu este acceptat în Linux; 0, NUL) Caracter de comutare (SWTCH). Utilizat în System V pentru a schimba shell-urile în shell layers, un predecesor al controlului lucrărilor shell.
- VTIME
- Timp de așteptare în zeci de secunde pentru citirea noncanonică (TIME).
- VWERASE
- (nu există în POSIX; 027, ETB, Ctrl-W) Șterge cuvintele (WERASE). Recunoscut atunci când ICANON și IEXTEN sunt activate, iar apoi nu este transmis ca intrare.
Un caracter special de terminal individual poate fi dezactivat prin definirea valorii elementului c_cc corespunzător la _POSIX_VDISABLE.
Valorile sub-indicilor simbolici de mai sus sunt toate diferite, cu excepția faptului că VTIME, VMIN pot avea aceeași valoare ca VEOL, respectiv VEOF. În modul noncanonic, semnificația caracterului special este înlocuită cu semnificația timpului de așteptare. Pentru o explicație a VMIN și VTIME, consultați descrierea modului necanonic de mai jos.
Preluarea și modificarea configurărilor terminalului¶
tcgetattr() obține parametrii asociați obiectului la care se face referire prin fd și îi stochează în structura termios la care se face referire prin termios_p. Această funcție poate fi invocată dintr-un proces din fundal; cu toate acestea, atributele terminalului pot fi modificate ulterior de un proces din prim-plan.
tcsetattr() stabilește parametrii asociați terminalului (cu excepția cazului în care este necesar un suport din partea hardware-ului de bază care nu este disponibil) din structura termios la care se face referire prin termios_p. optional_actions specifică momentul în care modificările intră în vigoare:
- TCSANOW
- schimbarea are loc imediat.
- TCSADRAIN
- modificarea are loc după ce toate ieșirile scrise în fd au fost transmise. Această opțiune trebuie utilizată atunci când se modifică parametrii care afectează ieșirea.
- TCSAFLUSH
- modificarea are loc după ce toate ieșirile scrise la obiectul la care se referă fd au fost transmise, iar toate intrările care au fost primite, dar nu citite, vor fi eliminate înainte de efectuarea modificării.
Modul canonic și necanonic¶
Activarea fanionului canonic ICANON în c_lflag determină dacă terminalul funcționează în mod canonic (ICANON activat) sau în mod necanonic (ICANON dezactivat). În mod implicit, ICANON este activat.
În modul canonic:
- •
- Intrarea este disponibilă linie cu linie. O linie de intrare este disponibilă atunci când este tastat unul dintre delimitatorii de linie (NL, EOL, EOL2; sau EOF la începutul liniei). Cu excepția cazului EOF, delimitatorul de linie este inclus în tamponul returnat de read(2).
- •
- Editarea liniilor este activată (ERASE, KILL; și dacă fanionul IEXTEN este activat: WERASE, REPRINT, LNEXT). Un apel read(2) returnează cel mult o linie de intrare; dacă apelul read(2) a solicitat mai puțini octeți decât sunt disponibili în linia curentă de intrare, atunci sunt citiți doar atâția octeți câți au fost solicitați, iar caracterele rămase vor fi disponibile pentru un viitor apel read(2).
- •
- Lungimea maximă a liniei este de 4096 de caractere (inclusiv caracterul de sfârșit de linie nouă); liniile mai lungi de 4096 de caractere sunt trunchiate. După 4095 de caractere, procesarea intrării (de exemplu, procesarea ISIG și ECHO*) continuă, dar orice date de intrare după 4095 de caractere până la (dar fără a include) orice linie nouă de terminare sunt eliminate. Acest lucru asigură faptul că terminalul poate primi întotdeauna mai multe date de intrare până când cel puțin o linie poate fi citită.
În modul necanonic, intrarea este disponibilă imediat (fără ca utilizatorul să fie nevoit să tasteze un caracter de delimitare a liniei), nu se efectuează nicio prelucrare a intrării, iar editarea liniei este dezactivată. Tamponul de citire va accepta numai 4095 de caractere; acest lucru asigură spațiul necesar pentru un caracter de linie nouă în cazul în care modul de intrare este comutat la modul canonic. Valorile MIN (c_cc[VMIN]) și TIME (c_cc[VTIME]) determină circumstanțele în care se finalizează un read(2); există patru cazuri distincte:
- MIN == 0, TIME == 0 (sondarea citirii)
- Dacă datele sunt disponibile, read(2) returnează imediat, cu cel mai mic dintre numărul de octeți disponibili sau numărul de octeți solicitați. Dacă nu există date disponibile, read(2) returnează 0.
- MIN > 0, TIME == 0 (blocarea citirii)
- read(2) blochează până când sunt disponibili MIN octeți și returnează până la numărul de octeți solicitat.
- MIN == 0, TIME > 0 (citire cu timp limită)
- TIME specifică limita pentru un temporizator în zecimi de secundă. Temporizatorul este pornit atunci când este apelat read(2). read(2) returnează fie atunci când cel puțin un octet de date este disponibil, fie atunci când temporizatorul expiră. În cazul în care temporizatorul expiră fără ca vreo intrare să devină disponibilă, read(2) returnează 0. În cazul în care datele sunt deja disponibile în momentul apelului la read(2), apelul se comportă ca și cum datele ar fi fost primite imediat după apel.
- MIN > 0, TIME > 0 (citire cu timp de așteptare între octeți)
- TIME specifică limita pentru un temporizator în zecimi de secundă. Odată ce un octet inițial de intrare devine disponibil, temporizatorul este repornit după primirea fiecărui alt octet. read(2) revine atunci când este îndeplinită oricare dintre următoarele condiții:
- Deoarece temporizatorul este pornit numai după ce octetul inițial devine disponibil, cel puțin un octet va fi citit. Dacă datele sunt deja disponibile la momentul apelului la read(2), apelul se comportă ca și cum datele ar fi fost primite imediat după apel.
POSIX nu specifică dacă valoarea faniomului de stare a fișierului O_NONBLOCK are prioritate față de valorile MIN și TIME. Dacă O_NONBLOCK este activat, un read(2) în modul necanonic poate reveni imediat, indiferent de valoarea MIN sau TIME. În plus, dacă nu există date disponibile, POSIX permite ca un read(2) în mod necanonic să returneze fie 0, fie -1 cu errno fixată la EAGAIN.
Modul brut¶
cfmakeraw() configurează terminalul într-un mod asemănător modului „raw” (brut) al vechiului controlor de terminal Versiunea 7: intrarea este disponibilă caracter cu caracter, ecoul este dezactivat și toate procesările speciale ale caracterelor de intrare și ieșire ale terminalului sunt dezactivate. Atributele terminalului sunt configurate după cum urmează:
termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
| INLCR | IGNCR | ICRNL | IXON); termios_p->c_oflag &= ~OPOST; termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); termios_p->c_cflag &= ~(CSIZE | PARENB); termios_p->c_cflag |= CS8;
Controlul liniei¶
tcsendbreak() transmite un flux continuu de biți cu valoare zero pentru o anumită durată, dacă terminalul utilizează transmiterea asincronă de date seriale. Dacă duration este zero, aceasta transmite biți cu valoare zero timp de cel puțin 0,25 secunde și nu mai mult de 0,5 secunde. Dacă duration nu este zero, aceasta transmite biți cu valoare zero pentru o anumită perioadă de timp definită de implementare.
Dacă terminalul nu utilizează transmiterea asincronă de date seriale, tcsendbreak() revine fără a întreprinde nicio acțiune.
tcdrain() așteaptă până când toate ieșirile scrise în obiectul la care face referire fd au fost transmise.
tcflush() elimină datele scrise în obiectul la care se referă fd, dar care nu au fost transmise, sau datele primite, dar care nu au fost citite, în funcție de valoarea lui queue_selector:
- TCIFLUSH
- șterge datele primite, dar necitite.
- TCOFLUSH
- șterge datele scrise, dar care nu au fost transmise.
- TCIOFLUSH
- șterge atât datele primite, dar care nu au fost citite, cât și datele scrise, dar care nu au fost transmise.
tcflow() suspendă transmiterea sau recepția de date pe obiectul la care se referă fd, în funcție de valoarea lui action:
- TCOOFF
- suspendă ieșirea.
- TCOON
- repornește ieșirea suspendată.
- TCIOFF
- transmite un caracter STOP, care oprește dispozitivul de terminal de la transmiterea de date către sistem.
- TCION
- transmite un caracter START, care pornește dispozitivul de terminal să transmită date către sistem.
În mod implicit, la deschiderea unui fișier terminal, nici intrarea, nici ieșirea acestuia nu sunt suspendate.
Viteza liniei¶
Funcțiile privind viteza baud sunt furnizate pentru obținerea și definirea valorilor vitezelor baud de intrare și ieșire în structura termios. Noile valori nu intră în vigoare până când tcsetattr() nu este apelat cu succes.
Stabilirea vitezei la B0 instruiește modemul să „închidă”. Viteza reală de biți corespunzătoare lui B38400 poate fi modificată cu setserial(8).
Vitezele în baud de intrare și de ieșire sunt stocate în structura termios.
cfgetospeed() returnează viteza baud de ieșire stocată în structura termios indicată de termios_p.
cfsetospeed() stabilește rata de baud de ieșire stocată în structura termios indicată de termios_p la speed, care trebuie să fie una dintre aceste constante:
Aceste constante sunt acceptate suplimentar pe arhitectura SPARC:
Aceste constante sunt acceptate suplimentar pe arhitecturile non-SPARC:
Datorită diferențelor dintre arhitecturi, aplicațiile portabile trebuie să verifice dacă o anumită constantă Bnnn este definită înainte de a o utiliza.
Viteza de baud zero, B0, este utilizată pentru a încheia conexiunea. Dacă B0 este specificat, liniile de control ale modemului nu vor mai fi asertate. În mod normal, acest lucru va deconecta linia. CBAUDEX este o mască pentru vitezele dincolo de cele definite în POSIX.1 (57600 și peste). Astfel, B57600 & CBAUDEX este diferită de zero.
Stabilirea vitezei de baud la o altă valoare decât cele definite de constantele Bnnn este posibilă prin ioctl-ul TCSETS2; consultați ioctl_tty(2).
cfgetispeed() returnează viteza baud de intrare stocată în structura termios.
cfsetispeed() stabilește viteza de baud de intrare stocată în structura termios la speed, care trebuie specificată ca una dintre constantele Bnnn enumerate mai sus pentru cfsetospeed(). Dacă viteza de baud de intrare este definită la constanta literală 0 (nu la constanta simbolică B0), viteza de baud de intrare va fi egală cu viteza de baud de ieșire.
cfsetspeed() este o extensie 4.4BSD. Aceasta preia aceleași argumente ca și cfsetispeed() și stabilește atât viteza de intrare, cât și cea de ieșire.
VALOAREA RETURNATö
cfgetispeed() returnează viteza baud de intrare stocată în structura termios.
cfgetospeed() returnează viteza de baud de ieșire stocată în structura termios.
Toate celelalte funcții returnează:
- 0
- în caz de succes.
- -1
- Toate celelalte funcții returnează: în caz de eșec și configurează errno pentru a indica eroarea.
Rețineți că tcsetattr() returnează rezultatul cu succes dacă oricare dintre modificările solicitate au putut fi efectuate cu succes. Prin urmare, atunci când se fac mai multe modificări, poate fi necesar să se facă un apel ulterior la tcgetattr() pentru a verifica dacă toate modificările au fost efectuate cu succes.
ATRIBUTE¶
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
tcgetattr(), tcsetattr(), tcdrain(), tcflush(), tcflow(), tcsendbreak(), cfmakeraw(), cfgetispeed(), cfgetospeed(), cfsetispeed(), cfsetospeed(), cfsetspeed() | Siguranța firelor | MT-Safe |
STANDARDE¶
ISTORIC¶
NOTE¶
UNIX V7 și mai multe sisteme ulterioare au o listă de viteze în baud unde după valorile B0 până la B9600 se găsesc cele două constante EXTA, EXTB („Extern A” și „Extern B”). Multe sisteme extind lista cu viteze în baud mult mai mari.
Efectul unei durate duration diferite de zero cu tcsendbreak() variază. SunOS specifică o pauză de duration * N secunde, unde N este cel puțin 0,25 și nu mai mult de 0,5. Linux, AIX, DU, Tru64 trimit o pauză de duration milisecunde. FreeBSD și NetBSD și HP-UX și MacOS ignoră valoarea lui duration. Sub Solaris și UnixWare, tcsendbreak() cu duration diferită de zero se comportă ca tcdrain().
ERORI¶
Pe arhitectura Alpha înainte de Linux 4.16 (și glibc înainte de glibc 2.28), valoarea XTABS a fost diferită de TAB3 și a fost ignorată de codul de disciplină al liniei N_TTY a controlorului de terminal ca rezultat (deoarece nu a făcut parte din masca TABDLY).
CONSULTAȚI ȘI¶
reset(1), setterm(1), stty(1), tput(1), tset(1), tty(1), ioctl_console(2), ioctl_tty(2), cc_t(3type), speed_t(3type), tcflag_t(3type), setserial(8)
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
15 iunie 2024 | Pagini de manual de Linux 6.9.1 |