Nimbux Skrevet 14. mars 2012 Del Skrevet 14. mars 2012 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
Sokkalf™ Skrevet 15. mars 2012 Del Skrevet 15. mars 2012 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
Nimbux Skrevet 15. mars 2012 Forfatter Del Skrevet 15. mars 2012 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
Sokkalf™ Skrevet 15. mars 2012 Del Skrevet 15. mars 2012 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå