passerer inndata fra standard input til en fil (C-programmering)

stemmer
1

Jeg skrev et program i C som har en funksjon som behandler filer som kan overføres til det ved en fil pekeren.

void process_my_file(FILE *fptr, ...) {
   /* do work */
}

Jeg ønsker å lese noen innspill fra standard input og gi det til min funksjon, uten å måtte skrive inngangen til en midlertidig fil. Ville det være mulig å passere den gjennom pekeren argumentet filen, som om det var en fil, uten å måtte skrive den på disk? Kan det gjøres via noen andre argument som jeg kan legge til signaturen?

Jeg er ny i dette, og trenger noen forslag. Takk på forhånd!

Publisert på 26/09/2009 klokken 21:39
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Du kan bruke freopen () -funksjonen for å åpne stdin.

Se også Omdirigering stdin og stdout fra C

Svarte 26/09/2009 kl. 21:42
kilden bruker

stemmer
0

Jeg kan se et par alternativer:

  1. Omskrive funksjon for å ta tekst, og krever at folk som kaller det leses fra filen og passere lese tekst i funksjon, i stedet for å sende en fil for å lese. Du kan også skrive en wrapper funksjon som tar en fil, leser innholdet, og sender innholdet til din funksjon som tar teksten, slik at folk kan fortsette å bare passere filehandles til funksjonen.
  2. Lær hvordan kompilatoren implementerer filehandles, og lage en funksjon som skaper en filehandle tilordnet til en streng, der "leser" fra filehandle få neste tegnet i strengen. Dette kan være svært kompilatoren avhengig, og kan være vanskelig, og kan være mer trøbbel enn det er verdt. Avhenger av hvor dårlig du trenger det.
  3. Hvis du kan komme unna med det, fseek()bakover på stdinslik at du kan lese teksten du leser, og deretter passere stdintil funksjonen. Selvfølgelig, hvis du ønsket å endre innspill fra stdinfør du passerte den, dette vil ikke fungere. Også, har du sannsynligvis ikke kan fseek()på en interaktiv filehandle. OS X lar meg slippe unna med det hvis stdindet omdirigert fra en fil, men du sannsynligvis ikke bør gjøre dette selv om du kan komme unna med det for nå.
Svarte 26/09/2009 kl. 21:49
kilden bruker

stemmer
5

Du kan ringe funksjon med stdinsom argument.

my_process_file(stdin, ...);

Den eneste grunnen til å bekymre seg for at er du sier 'noen innspill', men de fleste funksjoner sånn lese alle filen og stoppe på EOF. Uansett, kan du ringe din funksjon, og så lenge den oppfører seg som du trenger, vil du bli bra. Du har sannsynligvis ikke bør anta at det er noe ekstra informasjon om standard input etter den returnerer.

Merk at funksjonen ikke bør stole på operasjoner som fseek()som ikke fungerer på rør eller terminaler fordi stdiner ofte knyttet til dem.

Svarte 26/09/2009 kl. 21:58
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more