streams - c standard

Discussion in 'C Programming' started by MisterE, Oct 22, 2007.

  1. MisterE

    MisterE Guest

    Is there anything in c standard about the operation of file streams etc. in
    reguards to how they are supposed to act if an over flow occurs. I am trying
    to work out the correct way to handle files that are greater than 2^32
    bytes. Different compilers/operating systems etc. all behave different for
    ftell. I guess the answer is its undefined...
     
    MisterE, Oct 22, 2007
    #1
    1. Advertising

  2. MisterE

    Richard Bos Guest

    "MisterE" <> wrote:

    > Is there anything in c standard about the operation of file streams etc. in
    > reguards to how they are supposed to act if an over flow occurs.


    No. Except, of course, that merely writing to a file which is about to
    "overflow" (quotes because it's not the same thing as a real numeric
    overflow) may continue to write properly; may write garbage (since no
    conforming program can detect the difference anyway); may return with an
    error status as it would for, say, a file without write access; but may
    _not_ crash the program, return nonsense, or exhibit other truly
    undefined behaviour.

    Richard
     
    Richard Bos, Oct 22, 2007
    #2
    1. Advertising

  3. MisterE

    santosh Guest

    MisterE wrote:

    > Is there anything in c standard about the operation of file streams
    > etc. in reguards to how they are supposed to act if an over flow
    > occurs.


    Overflow for a file?

    All that Standard C guarantees is that the various I/O functions of the
    Standard library, (like putc, printf etc.), will return a status value
    indicating success or failure. The variable `errno` may or may not be
    set to any meaningful value.

    Thus though you can detect a failed operation, it's generally difficult
    or not possible with Standard C to find out _why_ the operation has
    failed. You might have to depend upon implementation and system
    specific methods.

    > I am trying to work out the correct way to handle files that
    > are greater than 2^32 bytes.


    On 32 bit systems, you very probably have to use non-Standard
    alternatives like ftello, ftello64 etc.

    You shouldn't have a problem on 64 bit systems.

    > Different compilers/operating systems
    > etc. all behave different for ftell.


    No. ftell behaves the way the Standard defines it. However it may or may
    not be sufficient under certain conditions.

    > I guess the answer is its
    > undefined...


    It _is_ defined. You're going beyond it's specification however, so what
    do you expect?
     
    santosh, Oct 22, 2007
    #3
  4. On Oct 22, 7:37 am, santosh <> wrote:
    > MisterE wrote:
    > > I am trying to work out the correct way to handle files that
    > > are greater than 2^32 bytes.

    >
    > On 32 bit systems, you very probably have to use non-Standard
    > alternatives like ftello, ftello64 etc.
    >
    > You shouldn't have a problem on 64 bit systems.


    Isn't this at least part of the reason fgetpos() and fsetpos() exist?
    fpos_t is allowed to be larger than a long, and even a non-integral
    type, to handle possibly huge files.
     
    Justin Spahr-Summers, Oct 22, 2007
    #4
  5. MisterE

    santosh Guest

    Justin Spahr-Summers wrote:

    > On Oct 22, 7:37 am, santosh <> wrote:
    >> MisterE wrote:
    >> > I am trying to work out the correct way to handle files that
    >> > are greater than 2^32 bytes.

    >>
    >> On 32 bit systems, you very probably have to use non-Standard
    >> alternatives like ftello, ftello64 etc.
    >>
    >> You shouldn't have a problem on 64 bit systems.

    >
    > Isn't this at least part of the reason fgetpos() and fsetpos() exist?
    > fpos_t is allowed to be larger than a long, and even a non-integral
    > type, to handle possibly huge files.


    Yes. I should have mentioned that. When the OP said he was using ftell,
    (and encountering problems), I automatically thought of ftell-like
    alternatives.

    As you said, fgetpos and fsetpos are Standardised and better.
     
    santosh, Oct 22, 2007
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Robert Schweikert
    Replies:
    1
    Views:
    373
    Jack Klein
    Jan 6, 2004
  2. raghu

    Standard streams

    raghu, Jan 19, 2007, in forum: Python
    Replies:
    1
    Views:
    260
    Marc 'BlackJack' Rintsch
    Jan 19, 2007
  3. Timothy Madden
    Replies:
    1
    Views:
    423
    Maxim Yegorushkin
    Jan 19, 2010
  4. Jatin Kumar

    Standard IO streams in Ruby

    Jatin Kumar, Aug 1, 2010, in forum: Ruby
    Replies:
    3
    Views:
    276
    David Masover
    Aug 4, 2010
  5. Replies:
    10
    Views:
    278
    alex23
    Jun 18, 2013
Loading...

Share This Page