Gå til innhold

Ctrl-d i mint


Anbefalte innlegg

Jeg driver og leser litt om C i såkalte K&R. Etter at jeg støtte på litt problemer i forbindelse med EOF, søkte jeg meg frem til at det å trykke ctrl-d i terminalen skulle produsere en sånn en. Etter mye prøving er det jeg sitter igjen med att om jeg trykker ctrl-d en gang, skjer ingenting, om jeg trykker ctrl-d en gang til så kommer EOF, og trykker jeg ctrl-d en tredje gang så lukkes terminalen. Så jeg lurer på om noen kan kaste litt lys over hvorfor den oppfører seg sånn når alle steder jeg har lest står det at ctrl-d bare skal produsere en EOF.

Lenke til kommentar
Videoannonse
Annonse

Hvor er det du trykker..?

 

Ctrl+D i en strøm som leses fra stdin sender en EOF til denne strømmen. Ctrl+D i shellet sender en EOF til shellet. Denne vil som regel tolkes som en "exit".

 

Det er opp til programmet ditt å håndtere en EOF, men det står det sikkert i boka di også.

Lenke til kommentar

Skjønner hvorfor shellet stenges når jeg trykker tre ganger, teit at jeg ikke skjønte det av meg selv.

 

Jeg burde kanskje sagt at jeg bruker ctrl-d i sammenheng med et program som tar inn en strøm med tegn ja. Bare en begynnergreie som skal telle antall karakterer som blir skrevet før EOF kommer, altså før man trykker ctrl-d. Men det jeg fortsatt stusser på er det at etter jeg har startet programmet i terminalen, skrevet inn noen bokstaver, og trykker ctrl-d for å sende EOF, så skjer ingenting, ikke før jeg trykker ctrl-d en gang til.

Lenke til kommentar

Måtte teste dette litt selv, og får samme oppførsel.

 

Tror det er "working as intended". I POSIX-speccen står følgende:

When received, all the bytes waiting to be read are immediately passed to the process without waiting for a <newline>, and the EOF is discarded. Thus, if there are no bytes waiting (that is, the EOF occurred at the beginning of a line), a byte count of zero shall be returned from the read(), representing an end-of-file indication.

 

Så det ser ut som CTRL+D terminerer det read-kallet som venter på input og returnerer antall karakterer som er skrevet inn. Bare når antall karakterer = 0 returnerer den en "ekte" EOF, noe som kan bekreftes av testprogrammet jeg laget når jeg trykker CTRL+D uten å ha skrevet noe først.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...