Skip to content
This repository has been archived by the owner on Jun 28, 2019. It is now read-only.

Commit

Permalink
topic: 12.16 12.22~12.24 12.31~12.33
Browse files Browse the repository at this point in the history
  • Loading branch information
mofaph committed Dec 17, 2013
1 parent 537d66f commit 3b70abb
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions exercise/00-topic.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1877,3 +1877,43 @@

11.13 修改 TINY,使得它可以干净地处理(而不是终止)在 write 函数试图写一个过早关
闭的连接时发生的 SIGPIPE 信号和 EPIPE 错误。

12.16 编写 hello.c(见图 12-13)的一个版本,它创建和回收 n 个可结合的对等线程,其
中 n 是一个命令行参数。

12.22 检查一下你对 select 函数的理解,请修改图 12-6 中(select.c)的服务器,使得
它在主服务器的每次迭代中最多回送一个文本行。

12.23 图 12-8 中(echoservers.c)的事件驱动并发 echo 服务器是有缺陷的,因为一个恶
意的客户端能够通过发送部分的文本行,使服务器拒绝为其他客户端服务。编写一个
改进的服务器版本,使之能够非阻塞地处理这些部分文本行。

12.24 RIO/IO 包中的函数(见 10.4 节)都是线程安全的。它们也都是可冲入函数吗?

12.31 实现标准 I/O 函数 fgets 的一个版本,叫做 tfgets,加入它在 5 秒之内没有从标
准输入上接收到一个输入行,那么就超时,并返回一个 NULL 指针。你的函数应该实
现在一个叫做 tfgets-proc.c 的包中,使用进程、信号和非本地跳转。它不应该使用
UNIX 的 alarm 函数。使用下面的驱动程序测试你的结果。

#include "csapp.h"

char *tfgets(char *s, int size, FILE *stream);

int main()
{
char buf[MAXLINE];

if (tfgets(buf, MAXLINE, stdin) == NULL)
printf("BOOM!\n");
else
printf("%s", buf);

exit(0);
}

12.32 使用 select 函数来实现练习题 12.31 中 tfgets 函数的一个版本。你的函数应该在
一个叫做 tfgets-select.c 的包中实现。用练习题 12.31 中的驱动程序测试你的结
果。你可以假定标准输入被赋值为描述符 0。

12.33 实现练习题 12.31 中 tfgets 函数的一个线程化的版本。你的函数应该在一个叫做
tfgets-thread.c 的包中实现。用练习题 12.31 中的驱动程序测试你的结果。

0 comments on commit 3b70abb

Please sign in to comment.