Linjedisciplin [1] ( engelsk linjedisciplin, ldisc ) er et abstraktionslag af undersystemet af terminalenheder (tty) i UNIX-lignende operativsystemer, der er nødvendige for at simulere de tilsvarende muligheder for en hardwareterminal . Dette lag er placeret mellem konsoldriveren og UART - driveren [2] .
Forbindelsen til UART-driveren sker gennem en tovejskanal. Denne ordning har flere variationer. For eksempel kan den virtuelle teletype -enhed /dev/tty fungere som en UART-driver - i dette tilfælde kan processer på den lokale maskine arbejde med den eksisterende virtuelle terminal. Hvis arbejdet udføres gennem en fysisk UART, giver et sådant skema kommunikation med processen på en fjernarbejdsstation, det vil sige fjernterminaltilstanden.
Forbindelsen til konsollen sker gennem to ensrettede kanaler: en indgangskanal og en udgangskanal. Også her er variationer mulige. Hvis en virtuel UNIX-terminaldriver bruges som en konsol, så kan brugeren gennem en sådan virtuel konsol arbejde i et UNIX-system i fuldskærmsteksttilstand og skifte mellem konsoller ved hjælp af genvejstaster . I stedet for en konsoldriver kan ldisc-grænsefladen eksporteres via en enhedsfil såsom /dev/ttyS0. I dette tilfælde kan et kommunikationsprogram såsom minicom interagere med ldisc.
Der er også et ldisc-forbindelsesskema, hvor både konsollen og UART erstattes med virtuelle enhedsfiler. Et sådant skema kaldes en pseudo-terminal.. I dette tilfælde erstatter en masterenhed såsom /dev/ptyp1 konsollen og bruges af et specialiseret program såsom tmux , xterm eller socat . En slaveenhed såsom /dev/ttyp1 erstatter UART og kan bruges af enhver brugerproces.
Linjedisciplinmodulet giver en buffer til modtagelse af en linje fra konsoludgangskanalen, behandler linjeredigeringskontroltegn (ikke at forveksle med terminalkontrolsekvenser) og giver også en implementering af ekkomekanismen - sender tegn modtaget fra konsollen tilbage gennem konsolindgangskanalen. Efter behandling sendes strengen fra bufferen til UART-kanalen. Data modtaget fra UART-kanalen sendes efter behandling til konsolindgangskanalen.
Det er ldisc-laget, der bestemmer, hvordan systemkald såsom read(2) og write(2) fungerer, når der arbejdes med forskellige terminalenhedsfiler . Det kan styres ved hjælp af ioctl(2)-systemkaldet (eller via tcsetattr (3) -biblioteksindpakningsfunktionen ), hvis mindst en af dets tilknyttede komponenter eksporteres via en enhedsfil. Samtidig betyder det ikke noget, hvilken komponent der eksporteres - kontrol kan udføres både gennem masterenheden og gennem slaven. Ved at bruge enhedsfilen /dev/tty (svarende til slavesiden) kan du f.eks. styre konsollens ekkotilstand , og ved at bruge enhedsfilen /dev/ttyS0 (svarende til mastersiden) kan du styre ekkotilstand for selve kommunikationsprogrammet: med ekko aktiveret kan alt skrevet til /dev/ttyS0 straks læses baglæns.
Hvis programmet bruger sin egen linjebehandling, såsom at bruge Ncurses- eller Readline- bibliotekerne , så kan linjebehandlingsmekanismen, der leveres af terminalenhedsundersystemet, deaktiveres ved at indstille ldisc til rå tilstand. I denne tilstand sendes data modtaget fra konsoludgangskanalen til UART-kanalen, og data modtaget fra UART sendes til konsolindgangskanalen. Ingen databehandling finder sted i denne tilstand.