演習8-4 K&R プログラミング言語C

演習8-4

/* fp に対してファイルの位置を指定する
 * バイナリ・ファイルに対しては、origin から offset 文字だけ離れたところにセットする
 * origin には MY_SEEK_SET (始め), MY_SEEK_CUR (現在位置), MY_SEEK_END (ファイルの終り) が指定可能
 * テキスト・ファイルに対しては、offset はゼロ、または ftell (この場合は origin は MY_SEEK_SET) で返される値でなければならない
 * エラーの場合は fseek からはゼロ以外の値が返される
 */
int my_fseek(MY_FILE *fp, long offset, int origin)
{
    int result = 0;

    if (fp == MY_NULL) {
        return -1;
    }
    if (fp->flag & _WRITE) {
        if (my_fflush(fp) == MY_EOF) {
            return MY_EOF;
        }
        result = lseek(fp->fd, offset, origin);
    } else if (fp->flag & _READ) {
        if (origin == MY_SEEK_CUR) { /* 現在位置からの場合 */
            offset -= fp->cnt;
        }
        result = lseek(fp->fd, offset, origin);
    }
    return (result == -1) ? -1 : 0;
}
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»