2

如何确定我是否可以将给定的字节数写入文件句柄(实际上是套接字)?(或者,如何“未读”我从其他文件句柄中读取的数据?)

我想要类似的东西:

n = how_much_can_I_write(w_handle);
n = 读取(r_handle,buf,n);
断言(n==写(w_handle,buf,n));

两个文件句柄(r_handle 和 w_handle)都从 epoll_wait 接收到就绪状态。

我希望将 r_handle 中的所有数据复制到 w_handle 而不使用“写债务”缓冲区。

一般来说,如何简单可靠地将数据从一个文件句柄复制到另一个文件句柄?

@related如何在 Linux 中“互连”两个套接字?

4

2 回答 2

0

你不能那样做——一旦数据被写入,它就被写入——操作是不可逆的或无法提前预测的。你需要重新考虑你的程序逻辑。

于 2010-04-20T09:40:07.637 回答
0

我认为没有任何界面可以让您访问该信息,而且一旦您获得它就会过时。

我建议将两个文件描述符都设置为非阻塞,然后读取/写入 1K(可能更大)块,直到您获得 EAGAIN/EWOULDBLOCK,此时您应该缓存一个块,直到下一次写入 fd 准备好。

无论如何,您都需要一个缓冲区来执行读/写周期,所以为写债务保留缓冲区应该是个太大的问题?

于 2010-04-20T10:06:47.590 回答