是否清空或“清空”没有read()的文件描述符?

问题描述 投票:14回答:8

((注:这是not关于如何刷新write()的问题。可以这么说,这是它的另一端。)] >>

是否有可能清空其中包含要读取的数据的文件描述符

是否必须为read()?您可能对数据不感兴趣,因此全部读取它们会浪费您可能会更好地使用的空间和周期。

如果在POSIX中不可能,那么任何操作系统都可以通过任何非便携式方式来执行此操作吗?

UPDATE:

请注意,我说的是文件描述符,流。

((注意:这不是如何刷新write()的问题。可以这么说。这是它的另一端。)是否可以清空一个文件描述符,而该文件描述符中要读取数据读取()...

c flush file-descriptor
8个回答
1
投票

流具有可用的fclean,它将清除写缓冲区,并将读缓冲区返回给IO系统。


7
投票

如果您正在处理tty


4
投票

对于POSIX,请使用lseek(2)lseek(2)向前搜索。对于Windows,请使用lseek64(3)lseek64(3)


2
投票

如果知道要跳过的字节数,则可以对POSIX系统执行SetFilePointer()SetFilePointer()对象也有SetFilePointerEx()。在POSIX中,我认为您可以放心地查找文件末尾,其想法是,如果稍后写入更多数据,从而使数据超过SetFilePointerEx()设置的位置,则您现在可以读取更多数据。


2
投票

具有GNU C库2.5或更高版本的Linux 2.6.17或更高版本包含lseek(fd, n, SEEK_CUR);系统调用,该系统调用可用于将数据从一个文件描述符发送到另一个文件描述符无需将其复制到用户空间


1
投票

read()和flush()都不是标准C或C ++的一部分,但是肯定没有标准函数支持输入流的刷新。我想这反映出底层操作系统中不可用的东西。避免完全阅读某些内容的通常方法是使用某种seek()函数跳过该内容。


0
投票

根据splice(),POSIX系统将在/dev/null上执行此操作。


0
投票

BSD引入了splice,Solaris和glibc引入了/dev/null。从this

© www.soinside.com 2019 - 2024. All rights reserved.