⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 termios.cc

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 CC
字号:
/* termios.cc: termios for WIN32.   Copyright 1996, 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.   Written by Doug Evans and Steve Chamberlain of Cygnus Support   dje@cygnus.com, sac@cygnus.comThis file is part of Cygwin.This software is a copyrighted work licensed under the terms of theCygwin license.  Please consult the file "CYGWIN_LICENSE" fordetails. */#include "winsup.h"#include <errno.h>#include <signal.h>#include <stdlib.h>#include "cygerrno.h"#include "security.h"#include "fhandler.h"#include "path.h"#include "dtable.h"#include "cygheap.h"#include "cygwin/version.h"#include "perprocess.h"#include "sigproc.h"#include <sys/termios.h>/* tcsendbreak: POSIX 7.2.2.1 */extern "C" inttcsendbreak (int fd, int duration){  int res = -1;  cygheap_fdget cfd (fd);  if (cfd < 0)    goto out;  if (!cfd->is_tty ())    set_errno (ENOTTY);  else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)    res = cfd->tcsendbreak (duration);out:  syscall_printf ("%d = tcsendbreak (%d, %d)", res, fd, duration);  return res;}/* tcdrain: POSIX 7.2.2.1 */extern "C" inttcdrain (int fd){  int res = -1;  termios_printf ("tcdrain");  cygheap_fdget cfd (fd);  if (cfd < 0)    goto out;  if (!cfd->is_tty ())    set_errno (ENOTTY);  else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)    res = cfd->tcdrain ();out:  syscall_printf ("%d = tcdrain (%d)", res, fd);  return res;}/* tcflush: POSIX 7.2.2.1 */extern "C" inttcflush (int fd, int queue){  int res = -1;  cygheap_fdget cfd (fd);  if (cfd < 0)    goto out;  if (!cfd->is_tty ())    set_errno (ENOTTY);  else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)    res = cfd->tcflush (queue);out:  termios_printf ("%d = tcflush (%d, %d)", res, fd, queue);  return res;}/* tcflow: POSIX 7.2.2.1 */extern "C" inttcflow (int fd, int action){  int res = -1;  cygheap_fdget cfd (fd);  if (cfd < 0)    goto out;  if (!cfd->is_tty ())    set_errno (ENOTTY);  else if ((res = cfd->bg_check (-SIGTTOU)) > bg_eof)    res = cfd->tcflow (action);out:  syscall_printf ("%d = tcflow (%d, %d)", res, fd, action);  return res;}/* tcsetattr: POSIX96 7.2.1.1 */extern "C" inttcsetattr (int fd, int a, const struct termios *t){  int res;  t = __tonew_termios (t);  int e = get_errno ();  while (1)    {      sigframe thisframe (mainthread);      res = -1;      cygheap_fdget cfd (fd);      if (cfd < 0)	{	  e = get_errno ();	  break;	}      if (!cfd->is_tty ())	{	  e = ENOTTY;	  break;	}      res = cfd->bg_check (-SIGTTOU);      switch (res)	{	case bg_eof:	  e = get_errno ();	  break;	case bg_ok:	  if (cfd.isopen ())	    res = cfd->tcsetattr (a, t);	  else	    e = get_errno ();	  break;	case bg_signalled:	  if (thisframe.call_signal_handler ())	    continue;	  res = -1;	  /* fall through intentionally */	default:	  e = get_errno ();	  break;	}      break;    }  set_errno (e);  termios_printf ("iflag %p, oflag %p, cflag %p, lflag %p, VMIN %d, VTIME %d",	t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],	t->c_cc[VTIME]);  termios_printf ("%d = tcsetattr (%d, %d, %x)", res, fd, a, t);  return res;}/* tcgetattr: POSIX 7.2.1.1 */extern "C" inttcgetattr (int fd, struct termios *in_t){  int res = -1;  struct termios *t = __makenew_termios (in_t);  cygheap_fdget cfd (fd);  if (cfd < 0)    /* saw an error */;  else if (!cfd->is_tty ())    set_errno (ENOTTY);  else if ((res = cfd->tcgetattr (t)) == 0)    (void) __toapp_termios (in_t, t);  if (res)    termios_printf ("%d = tcgetattr (%d, %p)", res, fd, in_t);  else    termios_printf ("iflag %x, oflag %x, cflag %x, lflag %x, VMIN %d, VTIME %d",	  t->c_iflag, t->c_oflag, t->c_cflag, t->c_lflag, t->c_cc[VMIN],	  t->c_cc[VTIME]);  return res;}/* tcgetpgrp: POSIX 7.2.3.1 */extern "C" inttcgetpgrp (int fd){  int res = -1;  cygheap_fdget cfd (fd);  if (cfd < 0)    /* saw an error */;  else if (!cfd->is_tty ())    set_errno (ENOTTY);  else    res = cfd->tcgetpgrp ();  termios_printf ("%d = tcgetpgrp (%d)", res, fd);  return res;}/* tcsetpgrp: POSIX 7.2.4.1 */extern "C" inttcsetpgrp (int fd, pid_t pgid){  int res = -1;  cygheap_fdget cfd (fd);  if (cfd < 0)    /* saw an error */;  else if (!cfd->is_tty ())    set_errno (ENOTTY);  else    res = cfd->tcsetpgrp (pgid);  termios_printf ("%d = tcsetpgrp (%d, %x)", res, fd, pgid);  return res;}/* NIST PCTS requires not macro-only implementation */#undef cfgetospeed#undef cfgetispeed#undef cfsetospeed#undef cfsetispeed/* cfgetospeed: POSIX96 7.1.3.1 */extern "C" speed_tcfgetospeed (struct termios *tp){  return __tonew_termios (tp)->c_ospeed;}/* cfgetispeed: POSIX96 7.1.3.1 */extern "C" speed_tcfgetispeed (struct termios *tp){  return __tonew_termios (tp)->c_ispeed;}/* cfsetospeed: POSIX96 7.1.3.1 */extern "C" intcfsetospeed (struct termios *in_tp, speed_t speed){  struct termios *tp = __tonew_termios (in_tp);  tp->c_ospeed = speed;  (void) __toapp_termios (in_tp, tp);  return 0;}/* cfsetispeed: POSIX96 7.1.3.1 */extern "C" intcfsetispeed (struct termios *in_tp, speed_t speed){  struct termios *tp = __tonew_termios (in_tp);  tp->c_ispeed = speed;  (void) __toapp_termios (in_tp, tp);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -