亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? signal.cc

?? cygwin, 著名的在win32下模擬unix操作系統的東東
?? CC
字號:
/* signal.cc   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.   Written by Steve Chamberlain of Cygnus Support, sac@cygnus.com   Significant changes by Sergey Okhapkin <sos@prospect.com.ru>This 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 <stdlib.h>#include "cygerrno.h"#include <sys/cygwin.h>#include "sigproc.h"#include "pinfo.h"int sigcatchers;	/* FIXME: Not thread safe. */#define sigtrapped(func) ((func) != SIG_IGN && (func) != SIG_DFL)static inline voidset_sigcatchers (void (*oldsig) (int), void (*cursig) (int)){#ifdef DEBUGGING  int last_sigcatchers = sigcatchers;#endif  if (!sigtrapped (oldsig) && sigtrapped (cursig))    sigcatchers++;  else if (sigtrapped (oldsig) && !sigtrapped (cursig))    sigcatchers--;#ifdef DEBUGGING  if (last_sigcatchers != sigcatchers)    sigproc_printf ("last %d, old %d, cur %p, cur %p", last_sigcatchers,		    sigcatchers, oldsig, cursig);#endif}extern "C" _sig_func_ptrsignal (int sig, _sig_func_ptr func){  sig_dispatch_pending (0);  _sig_func_ptr prev;  /* check that sig is in right range */  if (sig < 0 || sig >= NSIG || sig == SIGKILL || sig == SIGSTOP)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = signal (%d, %p)", sig, func);      return (_sig_func_ptr) SIG_ERR;    }  prev = myself->getsig (sig).sa_handler;  myself->getsig (sig).sa_handler = func;  myself->getsig (sig).sa_mask = 0;  /* SA_RESTART is set to maintain BSD compatible signal behaviour by default.     This is also compatible with the behaviour of signal(2) in Linux. */  myself->getsig (sig).sa_flags |= SA_RESTART;  set_sigcatchers (prev, func);  syscall_printf ("%p = signal (%d, %p)", prev, sig, func);  return prev;}extern "C" unsigned intsleep (unsigned int seconds){  int rc;  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  DWORD ms, start_time, end_time;  ms = seconds * 1000;  start_time = GetTickCount ();  end_time = start_time + (seconds * 1000);  syscall_printf ("sleep (%d)", seconds);  rc = WaitForSingleObject (signal_arrived, ms);  DWORD now = GetTickCount ();  if (rc == WAIT_TIMEOUT || now >= end_time)    ms = 0;  else    ms = end_time - now;  if (WaitForSingleObject (signal_arrived, 0) == WAIT_OBJECT_0)    (void) thisframe.call_signal_handler ();  DWORD res = (ms + 500) / 1000;  syscall_printf ("%d = sleep (%d)", res, seconds);  return res;}extern "C" unsigned intusleep (unsigned int useconds){  sig_dispatch_pending (0);  syscall_printf ("usleep (%d)", useconds);  WaitForSingleObject (signal_arrived, (useconds + 500) / 1000);  syscall_printf ("0 = usleep (%d)", useconds);  return 0;}extern "C" intsigprocmask (int sig, const sigset_t *set, sigset_t *oldset){  sig_dispatch_pending (0);  /* check that sig is in right range */  if (sig < 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = sigprocmask signal %d out of range", sig);      return -1;    }  if (oldset)    *oldset = myself->getsigmask ();  if (set)    {      sigset_t newmask = myself->getsigmask ();      switch (sig)	{	case SIG_BLOCK:	  /* add set to current mask */	  newmask |= *set;	  break;	case SIG_UNBLOCK:	  /* remove set from current mask */	  newmask &= ~*set;	  break;	case SIG_SETMASK:	  /* just set it */	  newmask = *set;	  break;	default:	  set_errno (EINVAL);	  return -1;	}      (void) set_process_mask (newmask);    }  return 0;}static intkill_worker (pid_t pid, int sig){  sig_dispatch_pending (0);  int res = 0;  pinfo dest (pid);  BOOL sendSIGCONT;  if (!dest)    {      set_errno (ESRCH);      return -1;    }  dest->setthread2signal (NULL);  if ((sendSIGCONT = (sig < 0)))    sig = -sig;#if 0  if (dest == myself && !sendSIGCONT)    dest = myself_nowait_nonmain;#endif  if (sig == 0)    {      res = proc_exists (dest) ? 0 : -1;      if (res < 0)	set_errno (ESRCH);    }  else if ((res = sig_send (dest, sig)))    {      sigproc_printf ("%d = sig_send, %E ", res);      res = -1;    }  else if (sendSIGCONT)    (void) sig_send (dest, SIGCONT);  syscall_printf ("%d = kill_worker (%d, %d)", res, pid, sig);  return res;}intraise (int sig){  return kill (myself->pid, sig);}intkill (pid_t pid, int sig){  sigframe thisframe (mainthread);  syscall_printf ("kill (%d, %d)", pid, sig);  /* check that sig is in right range */  if (sig < 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("signal %d out of range", sig);      return -1;    }  /* Silently ignore stop signals from a member of orphaned process group.     FIXME: Why??? */  if (ISSTATE (myself, PID_ORPHANED) &&      (sig == SIGTSTP || sig == SIGTTIN || sig == SIGTTOU))    sig = 0;  return (pid > 0) ? kill_worker (pid, sig) : kill_pgrp (-pid, sig);}intkill_pgrp (pid_t pid, int sig){  int res = 0;  int found = 0;  int killself = 0;  sigframe thisframe (mainthread);  sigproc_printf ("pid %d, signal %d", pid, sig);  winpids pids;  for (unsigned i = 0; i < pids.npids; i++)    {      _pinfo *p = pids[i];      if (!proc_exists (p))	continue;      /* Is it a process we want to kill?  */      if ((pid == 0 && (p->pgid != myself->pgid || p->ctty != myself->ctty)) ||	  (pid > 1 && p->pgid != pid) ||	  (sig < 0 && NOTSTATE (p, PID_STOPPED)))	continue;      sigproc_printf ("killing pid %d, pgrp %d, p->ctty %d, myself->ctty %d",		      p->pid, p->pgid, p->ctty, myself->ctty);      if (p == myself)	killself++;      else if (kill_worker (p->pid, sig))	res = -1;      found++;    }  if (killself && kill_worker (myself->pid, sig))    res = -1;  if (!found)    {      set_errno (ESRCH);      res = -1;    }  syscall_printf ("%d = kill (%d, %d)", res, pid, sig);  return res;}extern "C" intkillpg (pid_t pgrp, int sig){  return kill (-pgrp, sig);}extern "C" voidabort (void){  sig_dispatch_pending (0);  sigframe thisframe (mainthread);  /* Flush all streams as per SUSv2.     From my reading of this document, this isn't strictly correct.     The streams are supposed to be flushed prior to exit.  However,     if there is I/O in any signal handler that will not necessarily     be flushed.     However this is the way FreeBSD does it, and it is much easier to     do things this way, so... */  if (_reent_clib ()->__cleanup)    _reent_clib ()->__cleanup (_reent_clib ());  /* Ensure that SIGABRT can be caught regardless of blockage. */  sigset_t sig_mask;  sigfillset (&sig_mask);  sigdelset (&sig_mask, SIGABRT);  set_process_mask (sig_mask);  raise (SIGABRT);  (void) thisframe.call_signal_handler (); /* Call any signal handler */  do_exit (1);	/* signal handler didn't exit.  Goodbye. */}extern "C" intsigaction (int sig, const struct sigaction *newact, struct sigaction *oldact){  sig_dispatch_pending (0);  sigproc_printf ("signal %d, newact %p, oldact %p", sig, newact, oldact);  /* check that sig is in right range */  if (sig < 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = sigaction signal %d out of range", sig);      return -1;    }  struct sigaction oa = myself->getsig (sig);  if (newact)    {      if (sig == SIGKILL || sig == SIGSTOP)	{	  set_errno (EINVAL);	  return -1;	}      myself->getsig (sig) = *newact;      if (newact->sa_handler == SIG_IGN)	sig_clear (sig);      if (newact->sa_handler == SIG_DFL && sig == SIGCHLD)	sig_clear (sig);      set_sigcatchers (oa.sa_handler, newact->sa_handler);    }  if (oldact)    *oldact = oa;  return 0;}extern "C" intsigaddset (sigset_t *set, const int sig){  /* check that sig is in right range */  if (sig <= 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = sigaddset signal %d out of range", sig);      return -1;    }  *set |= SIGTOMASK (sig);  return 0;}extern "C" intsigdelset (sigset_t *set, const int sig){  /* check that sig is in right range */  if (sig <= 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = sigdelset signal %d out of range", sig);      return -1;    }  *set &= ~SIGTOMASK (sig);  return 0;}extern "C" intsigismember (const sigset_t *set, int sig){  /* check that sig is in right range */  if (sig <= 0 || sig >= NSIG)    {      set_errno (EINVAL);      syscall_printf ("SIG_ERR = sigdelset signal %d out of range", sig);      return -1;    }  if (*set & SIGTOMASK (sig))    return 1;  else    return 0;}extern "C" intsigemptyset (sigset_t *set){  *set = (sigset_t) 0;  return 0;}extern "C" intsigfillset (sigset_t *set){  *set = ~((sigset_t) 0);  return 0;}extern "C" intsigpending (sigset_t *set){  unsigned bit;  *set = 0;  for (int sig = 1; sig < NSIG; sig++)    if (*myself->getsigtodo (sig) && myself->getsigmask () & (bit = SIGTOMASK (sig)))      *set |= bit;  return 0;}extern "C" intsigsuspend (const sigset_t *set){  return handle_sigsuspend (*set);}extern "C" intsigpause (int signal_mask){  return handle_sigsuspend ((sigset_t) signal_mask);}extern "C" intpause (void){  return handle_sigsuspend (myself->getsigmask ());}extern "C" intsiginterrupt (int sig, int flag){  struct sigaction act;  (void)sigaction(sig, NULL, &act);  if (flag)    act.sa_flags &= ~SA_RESTART;  else    act.sa_flags |= SA_RESTART;  return sigaction(sig, &act, NULL);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa国产一区| 一区二区三区精品在线| 精品一区二区免费在线观看| 欧美色窝79yyyycom| 亚洲午夜久久久久久久久久久| 日本丶国产丶欧美色综合| 亚洲男女一区二区三区| 欧美亚洲自拍偷拍| 丝袜脚交一区二区| 欧美国产日韩在线观看| 色先锋资源久久综合| 男人的j进女人的j一区| 久久久久国色av免费看影院| 欧美系列日韩一区| 国产乱色国产精品免费视频| 国产精品久久久久久久裸模| 久久久一区二区三区捆绑**| 欧美乱妇15p| 中文字幕一区二区三区在线观看| 亚洲影视资源网| 极品美女销魂一区二区三区免费| 精品国产91乱码一区二区三区| 欧美一区二区三区在线电影| 亚洲第一电影网| 亚洲国产精品传媒在线观看| 3d动漫精品啪啪一区二区竹菊| 久久精品国产一区二区三区免费看| 中文一区二区在线观看| 日韩免费观看2025年上映的电影 | 亚洲精品在线三区| 国产一区二区三区免费看| 日韩毛片视频在线看| 国产亚洲欧美色| 国产网站一区二区| 欧美久久久一区| 777欧美精品| 日韩欧美国产麻豆| 精品久久人人做人人爽| 精品国产一区二区亚洲人成毛片| 日韩精品一区二区三区视频播放| 91精品国产色综合久久| 777xxx欧美| 久久久久久久久99精品| 国产欧美一区二区在线| 国产精品免费久久久久| 亚洲日本va在线观看| 一区二区三区免费| 日韩中文字幕一区二区三区| 久久99久久精品欧美| 国产91精品精华液一区二区三区| 国产另类ts人妖一区二区| 99在线精品观看| 欧美高清视频www夜色资源网| 日韩免费视频一区| 亚洲精品免费在线播放| 免费人成精品欧美精品| 国产在线视频一区二区| 色域天天综合网| 国产欧美日韩视频一区二区 | 精品成人在线观看| 亚洲精品乱码久久久久久| 另类人妖一区二区av| 欧美中文字幕一区二区三区| 久久久久亚洲蜜桃| 韩国成人福利片在线播放| 色综合色综合色综合色综合色综合| 欧美一区二区久久| 亚洲一区二区三区中文字幕| 丁香婷婷综合激情五月色| 欧美一区二区三区影视| 亚洲成人动漫在线免费观看| 成人免费看的视频| 国产欧美日韩另类一区| 麻豆91在线播放免费| 欧美最新大片在线看| 亚洲一区二区av电影| av在线播放成人| 久久美女艺术照精彩视频福利播放| 亚洲高清在线精品| 91精品国产乱码久久蜜臀| 日本欧美一区二区三区乱码 | 久久久99免费| 国产成人久久精品77777最新版本| 久久综合色8888| 丰满白嫩尤物一区二区| 亚洲猫色日本管| 欧美日韩一区二区欧美激情| 婷婷国产v国产偷v亚洲高清| 3d成人动漫网站| 国产美女视频91| 亚洲精品国久久99热| 91精品麻豆日日躁夜夜躁| 久草这里只有精品视频| 日本一区二区三区国色天香| 欧美视频一区二区在线观看| 日本一区中文字幕| 中文字幕一区二区三区不卡在线| 日本高清不卡aⅴ免费网站| 国产制服丝袜一区| 日韩影院在线观看| 亚洲啪啪综合av一区二区三区| 欧美日韩国产大片| 成人av网站大全| 久久99久久99| 美国十次了思思久久精品导航| 国产精品色婷婷| 久久综合九色综合97婷婷女人| 91搞黄在线观看| 99国产一区二区三精品乱码| 久久福利视频一区二区| 免费在线欧美视频| 樱花影视一区二区| 亚洲欧美日韩综合aⅴ视频| 精品久久久久久综合日本欧美| 欧美色综合久久| 欧美高清视频一二三区 | 天堂一区二区在线| 亚洲免费三区一区二区| 亚洲欧洲精品一区二区三区| 国产清纯在线一区二区www| 国产亚洲福利社区一区| 国产午夜精品理论片a级大结局| 欧美精品一区二区三区久久久| 欧美一区二区三区免费大片 | 日日夜夜精品免费视频| 亚洲成人av福利| 精品一区二区三区日韩| 麻豆精品国产传媒mv男同| 国产又黄又大久久| 成人午夜精品在线| 欧美伊人精品成人久久综合97| 欧美日韩国产高清一区二区三区| 欧美乱妇23p| 依依成人综合视频| 一区二区三区欧美| 欧美国产激情二区三区| 欧美久久一区二区| 成人一区二区三区视频| 成人免费视频网站在线观看| 天堂在线亚洲视频| 久久久久亚洲综合| 一区二区成人在线| 极品少妇一区二区| 欧美日韩一区二区三区不卡| 亚洲精品在线观看视频| 一区二区三区在线视频免费| 日韩成人午夜精品| 色婷婷精品大在线视频| 日韩欧美一区在线| 五月激情综合色| 91视频在线观看| 欧美国产成人精品| 国产麻豆成人传媒免费观看| 欧美亚洲动漫另类| 337p日本欧洲亚洲大胆精品| 亚洲综合激情另类小说区| 国产精品77777| 欧美久久久久免费| 一区二区三区毛片| 欧美日韩一区二区三区不卡| 亚洲精品乱码久久久久久久久| 国产福利精品一区| 日韩欧美国产1| 免费精品视频在线| 久久综合色天天久久综合图片| 日韩和的一区二区| 欧美精品一区二区三区四区| 国产一区二区三区四| 久久精品在这里| aaa亚洲精品| 亚洲综合图片区| 精品福利在线导航| 国产69精品久久久久777| 久久精品人人做| 日本电影亚洲天堂一区| 日韩极品在线观看| 国产精品蜜臀在线观看| 99久久99久久综合| 亚洲一区在线视频| 亚洲精品一区二区三区在线观看| 国产一区二区三区四区五区美女| 欧美激情一区二区三区| 欧洲激情一区二区| 久久66热re国产| 亚洲成人在线观看视频| 国产午夜精品久久久久久免费视 | 久久婷婷色综合| 在线观看亚洲a| 成人美女视频在线观看| 蓝色福利精品导航| 亚洲男同1069视频| 日韩免费视频一区二区| 色吧成人激情小说| 成人av电影免费在线播放| 日韩精品电影在线观看| 亚洲色图视频免费播放| 久久久99久久| 国产欧美一区二区三区网站| 欧美高清精品3d| 欧美一区二区在线免费播放|