终端IO
每个终端都有输入输出队列
队列都有长度,如果输入超过输入队列MAX_INPUT长度,大多数unix系统会回显响铃来处理。
但是对于输出队列来讲,虽然输出队列也有长度,但是一旦写不进去的时候,写进程会suspend掉
直至有空闲空间
终端行规程 terminal line discipline
会帮忙做规范处理
终端设备属性 ->termios
struct termios {
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t c_line;
cc_t c_cc[NCCS];
};
local flag影响驱动程序和用户之间的接口
Android上tcflag_t->
typedef unsigned int tcflag_t;
cc_t
typedef unsigned char cc_t;
control flag中很多选项标志都是用几位标识然后用或来做选择
isatty的实现,借助tcgetattr的出错机制,成功返回0;否则返回-1,带上ENOTTY
int
isatty (int fd)
{
struct termios term;
return tcgetattr (fd, &term) == 0;
}
Anyway,终端IO很复杂...