easy way to determine if a stream or fd is seekable

Dieter BSD dieterbsd at engineer.com
Sun Nov 20 17:40:29 UTC 2011


> something like the following inside lseek() would take care of tape drives:
>
>        if (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode)) {
>                if (ioctl(io->fd, FIODTYPE, &type) == -1)
>                        err(1, "%s", io->name);
>
>                if (type & D_TAPE)
>                        return(EBADF)
>        }

I'd suggest ENODEV ("Operation not supported by device") rather than
EBADF ("Bad file descriptor").

To do this correctly, we'd need some standard way to ask the
device driver if the device can perform the seek or not.



More information about the freebsd-hackers mailing list