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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mq_notify.c

?? linux下的C語言庫源碼有一百多M解壓后很不錯
?? C
字號:
/* Copyright (C) 2004, 2005 Free Software Foundation, Inc.   This file is part of the GNU C Library.   Contribute by Ulrich Drepper <drepper@redhat.com>, 2004.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  */#include <assert.h>#include <errno.h>#include <fcntl.h>#include <mqueue.h>#include <pthread.h>#include <signal.h>#include <stdlib.h>#include <string.h>#include <sysdep.h>#include <unistd.h>#include <sys/socket.h>#include <not-cancel.h>#ifdef __NR_mq_notify/* Defined in the kernel headers: */#define NOTIFY_COOKIE_LEN	32	/* Length of the cookie used.  */#define NOTIFY_WOKENUP		1	/* Code for notifcation.  */#define NOTIFY_REMOVED		2	/* Code for closed message queue					   of de-notifcation.  *//* Data structure for the queued notification requests.  */union notify_data{  struct  {    void (*fct) (union sigval);	/* The function to run.  */    union sigval param;		/* The parameter to pass.  */    pthread_attr_t *attr;	/* Attributes to create the thread with.  */    /* NB: on 64-bit machines the struct as a size of 24 bytes.  Which means       byte 31 can still be used for returning the status.  */  };  char raw[NOTIFY_COOKIE_LEN];};/* Keep track of the initialization.  */static pthread_once_t once = PTHREAD_ONCE_INIT;/* The netlink socket.  */static int netlink_socket = -1;/* Barrier used to make sure data passed to the new thread is not   resused by the parent.  */static pthread_barrier_t notify_barrier;/* Modify the signal mask.  We move this into a separate function so   that the stack space needed for sigset_t is not deducted from what   the thread can use.  */static int__attribute__ ((noinline))change_sigmask (int how, sigset_t *oss){  sigset_t ss;  sigfillset (&ss);  return pthread_sigmask (how, &ss, oss);}/* The function used for the notification.  */static void *notification_function (void *arg){  /* Copy the function and parameter so that the parent thread can go     on with its life.  */  volatile union notify_data *data = (volatile union notify_data *) arg;  void (*fct) (union sigval) = data->fct;  union sigval param = data->param;  /* Let the parent go.  */  (void) pthread_barrier_wait (&notify_barrier);  /* Make the thread detached.  */  (void) pthread_detach (pthread_self ());  /* The parent thread has all signals blocked.  This is probably a     bit surprising for this thread.  So we unblock all of them.  */  (void) change_sigmask (SIG_UNBLOCK, NULL);  /* Now run the user code.  */  fct (param);  /* And we are done.  */  return NULL;}/* Helper thread.  */static void *helper_thread (void *arg){  while (1)    {      union notify_data data;      ssize_t n = recv (netlink_socket, &data, sizeof (data),			MSG_NOSIGNAL | MSG_WAITALL);      if (n < NOTIFY_COOKIE_LEN)	continue;      if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_WOKENUP)	{	  /* Just create the thread as instructed.  There is no way to	     report a problem with creating a thread.  */	  pthread_t th;	  if (__builtin_expect (pthread_create (&th, data.attr,						notification_function, &data)				== 0, 0))	    /* Since we passed a pointer to DATA to the new thread we have	       to wait until it is done with it.  */	    (void) pthread_barrier_wait (&notify_barrier);	}      else if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_REMOVED)	/* The only state we keep is the copy of the thread attributes.  */	free (data.attr);    }  return NULL;}static voidreset_once (void){  once = PTHREAD_ONCE_INIT;}static voidinit_mq_netlink (void){  /* This code might be called a second time after fork().  The file     descriptor is inherited from the parent.  */  if (netlink_socket == -1)    {      /* Just a normal netlink socket, not bound.  */      netlink_socket = socket (AF_NETLINK, SOCK_RAW, 0);      /* No need to do more if we have no socket.  */      if (netlink_socket == -1)	return;      /* Make sure the descriptor is closed on exec.  */      if (fcntl (netlink_socket, F_SETFD, FD_CLOEXEC) != 0)	goto errout;    }  int err = 1;  /* Initialize the barrier.  */  if (__builtin_expect (pthread_barrier_init (&notify_barrier, NULL, 2) == 0,			0))    {      /* Create the helper thread.  */      pthread_attr_t attr;      (void) pthread_attr_init (&attr);      (void) pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);      /* We do not need much stack space, the bare minimum will be enough.  */      (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);      /* Temporarily block all signals so that the newly created	 thread inherits the mask.  */      sigset_t oss;      int have_no_oss = change_sigmask (SIG_BLOCK, &oss);      pthread_t th;      err = pthread_create (&th, &attr, helper_thread, NULL);      /* Reset the signal mask.  */      if (!have_no_oss)	pthread_sigmask (SIG_SETMASK, &oss, NULL);      (void) pthread_attr_destroy (&attr);      if (err == 0)	{	  static int added_atfork;	  if (added_atfork == 0	      && pthread_atfork (NULL, NULL, reset_once) != 0)	    {	      /* The child thread will call recv() which is a		 cancellation point.  */	      (void) pthread_cancel (th);	      err = 1;	    }	  else	    added_atfork = 1;	}    }  if (err != 0)    {    errout:      close_not_cancel_no_status (netlink_socket);      netlink_socket = -1;    }}/* Register notification upon message arrival to an empty message queue   MQDES.  */intmq_notify (mqd_t mqdes, const struct sigevent *notification){  /* Make sure the type is correctly defined.  */  assert (sizeof (union notify_data) == NOTIFY_COOKIE_LEN);  /* Special treatment needed for SIGEV_THREAD.  */  if (notification == NULL || notification->sigev_notify != SIGEV_THREAD)    return INLINE_SYSCALL (mq_notify, 2, mqdes, notification);  /* The kernel cannot directly start threads.  This will have to be     done at userlevel.  Since we cannot start threads from signal     handlers we have to create a dedicated thread which waits for     notifications for arriving messages and creates threads in     response.  */  /* Initialize only once.  */  pthread_once (&once, init_mq_netlink);  /* If we cannot create the netlink socket we cannot provide     SIGEV_THREAD support.  */  if (__builtin_expect (netlink_socket == -1, 0))    {      __set_errno (ENOSYS);      return -1;    }  /* Create the cookie.  It will hold almost all the state.  */  union notify_data data;  memset (&data, '\0', sizeof (data));  data.fct = notification->sigev_notify_function;  data.param = notification->sigev_value;  if (notification->sigev_notify_attributes != NULL)    {      /* The thread attribute has to be allocated separately.  */      data.attr = (pthread_attr_t *) malloc (sizeof (pthread_attr_t));      if (data.attr == NULL)	return -1;      memcpy (data.attr, notification->sigev_notify_attributes,	      sizeof (pthread_attr_t));    }  /* Construct the new request.  */  struct sigevent se;  se.sigev_notify = SIGEV_THREAD;  se.sigev_signo = netlink_socket;  se.sigev_value.sival_ptr = &data;  /* Tell the kernel.  */  int retval = INLINE_SYSCALL (mq_notify, 2, mqdes, &se);  /* If it failed, free the allocated memory.  */  if (__builtin_expect (retval != 0, 0))    free (data.attr);  return retval;}#else# include <rt/mq_notify.c>#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91丝袜在线观看| 首页欧美精品中文字幕| 国产三级精品在线| 精品欧美一区二区三区精品久久| 久久久久综合网| 久久网这里都是精品| 亚洲综合色自拍一区| 精品一区二区在线免费观看| 色综合久久久网| 国产网站一区二区三区| 午夜精品一区在线观看| 99国产一区二区三精品乱码| 欧美精品一区二区久久久| 亚洲成在线观看| 91免费国产在线观看| 国产午夜亚洲精品不卡| 激情综合一区二区三区| 欧美日韩亚洲丝袜制服| 亚洲精品国产高清久久伦理二区| 国产精品99久久久久久久vr| 欧美成人一级视频| 免费精品视频在线| 91精品国产综合久久精品麻豆| 一区二区三区不卡在线观看| jlzzjlzz亚洲女人18| 欧美精品一区在线观看| 亚洲综合网站在线观看| 91麻豆精东视频| 亚洲天堂精品在线观看| 99国产精品视频免费观看| 欧美国产精品劲爆| 成人午夜精品一区二区三区| 国产精品视频线看| 成人激情免费电影网址| 国产精品麻豆一区二区| bt7086福利一区国产| 中文字幕人成不卡一区| 一本到不卡免费一区二区| 亚洲三级在线观看| 91官网在线观看| 午夜私人影院久久久久| 在线观看日韩av先锋影音电影院| 中文字幕在线观看不卡视频| 91美女片黄在线观看91美女| 亚洲精品中文在线观看| 欧美日韩国产欧美日美国产精品| 午夜精品成人在线| 欧美电视剧在线看免费| 国产一区二区三区四区五区入口| 国产三级精品视频| 色视频一区二区| 亚洲美女视频在线观看| 国产精品一品视频| 久久久久久免费| 91浏览器打开| 日韩电影一二三区| 久久久久久久久久久电影| 99精品1区2区| 欧美a一区二区| 日韩美女主播在线视频一区二区三区| 精品一区二区免费视频| 国产精品传媒视频| 欧美日韩亚洲综合在线| 国产一区视频导航| 亚洲三级免费电影| 欧美一区二区三区成人| 成人美女视频在线观看18| 亚洲天堂2016| 91精品国产综合久久小美女| 国产福利91精品一区二区三区| 亚洲欧美国产三级| 日韩视频在线永久播放| 99久久精品免费| 免费黄网站欧美| 亚洲精品国产精华液| 精品sm捆绑视频| 欧美在线观看一区| 国产福利不卡视频| 男女性色大片免费观看一区二区 | 日韩精品一区国产麻豆| 高清在线观看日韩| 日本视频一区二区三区| 亚洲欧洲日本在线| xfplay精品久久| 欧美美女视频在线观看| www.欧美精品一二区| 精品在线免费视频| 亚洲大片在线观看| 综合久久给合久久狠狠狠97色| 欧美大片日本大片免费观看| 日本道在线观看一区二区| 国产乱子伦视频一区二区三区 | 久久久.com| 在线电影院国产精品| 一本色道**综合亚洲精品蜜桃冫| 国产美女视频91| 美女免费视频一区二区| 亚洲一二三专区| 中文字幕一区二区三区蜜月| 欧美v亚洲v综合ⅴ国产v| 欧美日本一区二区三区四区 | 日本成人在线看| 亚洲国产精品久久人人爱蜜臀| 中文字幕欧美日本乱码一线二线 | 亚洲激情五月婷婷| 国产视频一区在线播放| 日韩欧美国产成人一区二区| 欧美日韩视频第一区| 欧美影片第一页| 91福利资源站| 99re66热这里只有精品3直播 | 蜜桃在线一区二区三区| 亚洲综合免费观看高清完整版 | 欧美日韩不卡在线| 欧美网站大全在线观看| 欧美影视一区二区三区| 欧美日韩一区二区欧美激情| 欧美日韩高清一区| 91精品国产欧美日韩| 日韩欧美激情四射| 日韩免费高清av| 久久中文娱乐网| 国产亚洲福利社区一区| 国产人久久人人人人爽| 国产精品青草久久| 亚洲欧美激情在线| 日韩制服丝袜av| 日韩 欧美一区二区三区| 免费在线观看日韩欧美| 久久av中文字幕片| 成人午夜又粗又硬又大| 色天天综合色天天久久| 欧美精品 日韩| 精品成人一区二区三区| 国产精品网站在线观看| 亚洲美腿欧美偷拍| 午夜久久久久久| 国产美女在线观看一区| 色哟哟国产精品免费观看| 欧美日韩一区成人| 91精品国产综合久久婷婷香蕉| 91精品国产综合久久精品麻豆 | 91看片淫黄大片一级在线观看| 91久久精品午夜一区二区| 欧美日韩精品三区| 国产网红主播福利一区二区| 亚洲免费视频成人| 免费国产亚洲视频| av福利精品导航| 91精品久久久久久蜜臀| 国产精品污www在线观看| 丝袜美腿亚洲综合| 不卡的av网站| 91精品欧美一区二区三区综合在| 国产精品免费人成网站| 日韩黄色小视频| 成人国产视频在线观看| 欧美乱妇15p| 欧美激情在线一区二区| 亚洲激情综合网| 日本亚洲欧美天堂免费| 91视频观看视频| 久久夜色精品一区| 亚洲午夜精品网| 不卡一区二区中文字幕| 欧美成人猛片aaaaaaa| 亚洲欧美日韩在线不卡| 国产精品亚洲视频| 91精品国产福利| 亚洲色图制服丝袜| 国产乱子伦视频一区二区三区 | 91视频国产观看| 国产欧美综合在线观看第十页| 天堂影院一区二区| 色综合久久99| 国产欧美日韩综合| 国产主播一区二区| 欧美成人免费网站| 一级日本不卡的影视| av高清久久久| 国产精品人成在线观看免费| 日日噜噜夜夜狠狠视频欧美人| 色8久久精品久久久久久蜜| 欧美激情在线一区二区| 狠狠色综合播放一区二区| 日韩一区二区在线免费观看| 亚洲电影一区二区| 色噜噜狠狠色综合中国| 制服丝袜在线91| 一区二区在线观看免费视频播放| 丁香天五香天堂综合| 国产婷婷色一区二区三区在线| 免费av网站大全久久| 欧美日韩成人综合| 亚洲成人手机在线| 欧美午夜电影在线播放| 亚洲高清免费观看| 91精品欧美综合在线观看最新 | 国产成都精品91一区二区三| 久久久噜噜噜久久中文字幕色伊伊|