确定我可以写入文件句柄多少;将数据从一个FH复制到另一个FH

时间:2010-04-20 09:37:04

标签: linux sockets filehandle portforwarding epoll

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

我想要类似的东西:

n = how_much_can_I_write(w_handle);
n = read(r_handle, buf, n);
assert(n==write(w_handle, buf, n));

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

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

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

@related How can I "interconnect" two sockets in Linux?

2 个答案:

答案 0 :(得分:0)

你不能这样做 - 一旦写入数据,就会被写入 - 操作不可逆或可提前预测。您需要重新考虑您的程序逻辑。

答案 1 :(得分:0)

我认为没有任何界面允许您访问该信息,并且无论如何它都会变得陈旧。

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

你需要有一个缓冲区来进行读/写循环,所以保留写入债务的缓冲区应该是一个太大的问题吗?