from:《Solaris系统编程》Rich Teer : 93.
处理网络设备,终端和streams设备上的IO程序:
#include <unistd.h>
#include <errno.h>
ssize_t readn (int fd, void *buf, size_t num)
{
ssize_t res;
size_t n;
char *ptr;
n = num;
ptr = buf;
while (n > 0) {
if ((res = read (fd, ptr, n)) == -1) {
if (errno == EINTR)
res = 0;
else
return (-1);
}
else if (res == 0)
break;
ptr += res;
n -= res;
}
return (num - n);
}
ssize_t writen (int fd, const void *buf, size_t num)
{
ssize_t res;
size_t n;
const char *ptr;
n = num;
ptr = buf;
while (n > 0) {
if ((res = write (fd, ptr, n)) <= 0) {
if (errno == EINTR)
res = 0;
else
return (-1);
}
ptr += res;
n -= res;
}
return (num);
}
本文提供了一个用于Solaris系统中网络设备、终端及streams设备上进行输入输出操作的程序实例。该程序通过两个函数实现可靠的数据读写:readn用于确保从指定文件描述符读取指定数量的数据;writen则确保将所有数据写入到指定的文件描述符。
3463

被折叠的 条评论
为什么被折叠?



