perl函数说明(getc)

来源:互联网 发布:单片机相关文献 编辑:程序博客网 时间:2024/06/04 23:20
  • getc FILEHANDLE
  • getc

这个函数从附着到 FILEHANDLE 上的输入文件返回下一个字节。在文件结尾的时候,或者碰到 I/O 错误的时候它返回 undef。如果省略了 FILEHANDLE,那么该函数从 STDIN 中读取。

这个函数有点慢,但是偶尔可以用于从键盘上读取一个字符输入(实际上是字节)——前提是你能让你的键盘输入不经过缓冲。这个函数需要从标准 I/O 库里来的未经缓冲的输入。糟糕的是,标准的 I/O 库还没有标准到能够提供一种可移植的方法,告诉下层操作系统供应无缓冲的键盘输入到标准 I/O 系统。要做着件事情,你必须稍微更聪明一点,并且采取操作系统相关的做法。在 Unix 里,你可以说:

   if ($BSD_STYLE) {      system "stty cbreak /dev/tty 2>&1"   } else {      system "stty", "-icanon", "eol", "......";   }   $key = getc;   if ($BSD_STYLE) {      system "stty -cbreak /dev/tty 2>&1";   } else {      system "stty", "icanon", "eol", "^@";    # ASCII NUL   }   print "\n";

上面的代码把在终端上敲入的下一个字符(字节)放到字串 $key 里。如果你的 stty 程序有象 cbreak 这样的选项,那么你就需要 $BSD_STYLE 为真的地方的代码。否则你就需要它为假的地方的代码。判断 stty(1) 的选项就留给读者做练习吧。

POSIX 模块用 POSIX::getattr 函数提供了一个做这件事情的一个更具移植性的版本。又见来自离你最近的 CPAN 站点里的 Term::ReadKey 模块获取更具移植性和更灵活的方法。


0 0