源码和用法
您可以从 ftp.ssc.com/pub/lj/listings/issue105/6345.tgz 下载完整的源代码。输入tar -zxvf sfl-src.tgz解压它,然后输入make来构建可执行文件。您的目录中应该有一个名为 sfl 的可执行文件;如果您在没有任何参数的情况下启动它,它将显示用法。您必须在 sfl 命令的服务器和客户端实例中指定服务器的 IP 地址。这是一个用例
发送方
visitor@xalien-saucer:~/sfl-src > ./sfl s 10.0.0.2 Server binding to [10.0.0.2] Server sent 10240 bytes. visitor@xalien-saucer:~/sfl-src >
接收方
visitor@earth:~/sfl-src > ./sfl r 10.0.0.2 Client connecting to [10.0.0.2] Client received 10240 bytes. visitor@earth:~/sfl-src >
代码注释
1. 我使用了端口 1033;如果您的系统上存在冲突,请使用不同的端口。
2. 为了使示例代码更短更简单,我将 10K 缓冲区放在了堆栈上。您应该使用 malloc 在您的代码中分配缓冲区。
3. 为了使本文的代码更短,我跳过了对 close 系统调用返回值的检查。在实际程序中,您绝对应该检查返回值。
示例
如果您有兴趣了解更多关于 sendfile 系统调用的使用方法,请查看一些使用它的应用程序:Apache (www.apache.org)、Samba (www.samba.org)、Mozilla (www.mozilla.org) 和 Pure-FTPd (pureftpd.sf.net)。
要了解更多关于内核文件租约的信息,请查看 Samba 代码,在文件 smbd/oplock_linux.c 中。