linux测试 scullpipe 驱动

我们已经见到了 scullpipe 驱动如何实现阻塞 I/O. 如果你想试一试, 这个驱动的源码 可在剩下的本书例子中找到. 阻塞 I/O 的动作可通过打开 2 个窗口见到. 第一个可运行 一个命令诸如 cat /dev/scullpipe. 如果你接着, 在另一个窗口拷贝文件到

/dev/scullpipe, 你可见到文件的内容出现在第一个窗口.

测试非阻塞的动作是技巧性的, 因为可用于 shell 的传统的程序不做非阻塞操作. misc- progs 源码目录包含下面简单的程序, 称为 nbtest, 来测试非阻塞操作. 所有它做的是 拷贝它的输入到它的输出, 使用非阻塞 I/O 和在重试间延时. 延时时间在命令行被传递 被缺省是 1 秒.

int main(int argc, char **argv)

{

int delay = 1, n, m = 0; if (argc > 1)

delay=atoi(argv[1]);

fcntl(0, F_SETFL, fcntl(0,F_GETFL) | O_NONBLOCK); /* stdin */ fcntl(1, F_SETFL, fcntl(1,F_GETFL) | O_NONBLOCK); /* stdout */

while (1) {

n = read(0, buffer, 4096); if (n >= 0)

m = write(1, buffer, n);

if ((n < 0 || m < 0) && (errno != EAGAIN)) break;

sleep(delay);

}

perror(n < 0 ? "stdin" : "stdout");

exit(1);

}

如果你在一个进程跟踪工具, 如 strace 下运行这个程序, 你可见到每个操作的成功或者 失败, 依赖是否当进行操作时有数据可用.

原文地址:https://www.cnblogs.com/fanweisheng/p/11141882.html