Gå til innhold

Anbefalte innlegg

Hei,

 

Jeg driver å lager et enkelt filoverføringsprogram med sockets i Linux og lurte på om det var noen "spesiell" integer datatype for filstørrelser? Bare for å være konsistent, mener jeg...

 

La meg legge til at jeg prøver å teste det med svært store filer også...opp til 6.2 GB.

Endret av LostOblivion
Lenke til kommentar
Videoannonse
Annonse
Jeg driver å lager et enkelt filoverføringsprogram med sockets i Linux og lurte på om det var noen "spesiell" integer datatype for filstørrelser? Bare for å være konsistent, mener jeg...

 

Filstørrelser? Vel:

 

* ftell() (C99) sier long.

* lseek() (POSIX) bruker off_t.

* APUE nevner (2.7, figur 2.8) at off_t brukes til "file sizes and offsets (signed)".

 

En litt interessant ting er selvsagt om det filsystemet og kjernen du bruker støtter filer over 2 (evt. 4) GB.

Lenke til kommentar

Fant ut av det. For å kunne jobbe med store filer, må man jobbe på enten et 64-bit OS, eller et OS som har et LFS-API Med andre ord 64-bit versjoner av funksjoner som jobber med filer, slik som open blir open64, osv.

 

Man kan altså benytte seg av Large File Support på 32-bit OSer hvis de har støtte for det. Man kan skru på LFS ved enten å bruke LFG-APIet direkte ved direkte kall til open64, osv, eller, hvis man benytter seg av gcc, gi gcc opsjonen -D_FILE_OFFSET_BITS=64. Da vil alle kall til open, byttes ut med open64, osv. Det er viktig at man bruker off_t og ikke int her altså, når man henviser til filstørrelser og -posisjoner.

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...