70,034
社区成员
发帖
与我相关
我的任务
分享
if (缓冲区里有数据)
取走一个字节
else {
if (io句柄已有EOF标志)
0字节
else {
if (ReadFile读回字节数为0)
0字节
else {
for (每个字节)
{
if (CTRLZ) (1)
if (DEV) (2)
存入缓冲区
else
io句柄置EOF标志
跳出
else
存入缓冲区
}
} /* ReadFile读回字节数不为0 */
} /* io句柄没有EOF标志 */
if (0字节) {
fp句柄置EOF标志
return EOF
}
if (io句柄有EOF标志)
fp句柄置_IOCTRLZ标志
取走一个字节
}
#include <stdio.h>
int
main(int argc, char *argv[])
{
int ch;
for (;;)
while ((ch = getchar()) != EOF)
printf("%02x\n", ch);
return 0;
}
/*
$ ./hello
^Z 这里的直接^Z, 在Unix下是让进程停止
[1]+ Stopped ./b002
$ fg fg命令将刚才停止的进程放到前台继续运行
./hello
^ZA 先输入^V再输入^Z然后输入A并回车
1a
41
0a
^DA 先输入^V再输入^D然后输入A并回车
04
41
0a
^D 直接输入^D然后输入A并回车
0a
^C 先输入^V再输入^C并回车
03
0a
^C 直接输入^C进程收到SIGINT信号,退出了。
$ uname -a
SunOS t1000 5.10 Generic_118833-33 sun4v sparc SUNW,Sun-Fire-T1000 Solaris
*/