Using fseek with a file pointer that points to stdin

前端 未结 3 790
没有蜡笔的小新
没有蜡笔的小新 2020-11-28 15:52

Depending on command-line arguments, I\'m setting a file pointer to point either towards a specified file or stdin (for the purpose of piping). I then pass this pointer arou

相关标签:
3条回答
  • 2020-11-28 16:15

    Here is the relevant entry in the ANSI standard concerning the fseek function:

    For a text stream, either offset shall be zero, or offset shall be a value returned by an earlier successful call to the ftell function on a stream associated with the same file and whence shall be SEEK_SET

    So, possible but with some limitations

    0 讨论(0)
  • 2020-11-28 16:33

    Yes, it's perfectly normal that fseek won't work on stdin -- it'll normally only work on a disk file, or something reasonably similar.

    Though it's really a POSIX thing, you can typically use if (isatty(fileno(myFile))) to get at least a pretty good idea of whether seeking will work in a particular file. In some cases, isatty and/or fileno will have a leading underscore (e.g., IIRC the versions provided with Microsoft's compilers do).

    0 讨论(0)
  • 2020-11-28 16:34

    Fseek() is based on lseek(), and the lseek man page discusses possible errors, including:

     [ESPIPE]           Fildes is associated with a pipe, socket, or FIFO.
    

    If stdin is connected to a pseudo tty, I believe it will have socket behavior.

    0 讨论(0)
提交回复
热议问题