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

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

?? gnuserv.c

?? Emacs的一個插件源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* -*-C-*- Server code for handling requests from clients and forwarding them on to the GNU Emacs process. This file is part of GNU Emacs. Copying is permitted under those conditions described by the GNU General Public License. Copyright (C) 1989 Free Software Foundation, Inc. Author: Andy Norman (ange@hplb.hpl.hp.com), based on 'etc/server.c'         from the 18.52 GNU Emacs distribution. Please mail bugs and suggestions to the author at the above address.*//* HISTORY  * 11-Nov-1990		bristor@simba	 *    Added EOT stuff. *//* * This file incorporates new features added by Bob Weiner <weiner@mot.com>, * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>. * Please see the note at the end of the README file for details. * * (If gnuserv came bundled with your emacs, the README file is probably * ../etc/gnuserv.README relative to the directory containing this file) */static char rcsid [] = "$Header: gnuserv.c,v 2.0 94/08/14 12:33:29 arup Exp $";#include "gnuserv.h"#ifdef USE_LITOUT#ifdef linux#include <bsd/sgtty.h>#else#include <sgtty.h>#endif#endif#ifdef AIX#include <sys/select.h>#endif#if !defined(SYSV_IPC) && !defined(UNIX_DOMAIN_SOCKETS) && \    !defined(INTERNET_DOMAIN_SOCKETS)main (){  fprintf (stderr,"Sorry, the Emacs server is only supported on systems that have\n");  fprintf (stderr,"Unix Domain sockets, Internet Domain sockets or System V IPC\n");  exit (1);} /* main */#else /* SYSV_IPC || UNIX_DOMAIN_SOCKETS || INTERNET_DOMAIN_SOCKETS */#ifdef SYSV_IPCint ipc_qid = 0;		/* ipc message queue id */int ipc_wpid = 0;		/* watchdog task pid *//*  ipc_exit -- clean up the queue id and queue, then kill the watchdog task              if it exists. exit with the given status.*/void ipc_exit(stat)     int stat;{  msgctl(ipc_qid,IPC_RMID,0);    if (ipc_wpid != 0)    kill(ipc_wpid,SIGKILL);  exit(stat);} /* ipc_exit *//*  ipc_handle_signal -- catch the signal given and clean up.*/void ipc_handle_signal(sig)     int sig;{  ipc_exit(0);} /* ipc_handle_signal *//*   ipc_spawn_watchdog -- spawn a watchdog task to clean up the message queue should the			server process die.*/int ipc_spawn_watchdog(){  if ((ipc_wpid = fork()) == 0) { /* child process */    int ppid = getppid();	/* parent's process id */    setpgrp();			/* gnu kills process group on exit */        while (1) {      if (kill(ppid,0) < 0) {	/* ppid is no longer valid, parent may have died */	ipc_exit(0);      }; /* if */      sleep(10);		/* have another go later */    }; /* while */  }; /* if */} /* ipc_spawn_watchdog *//*  ipc_init -- initialize server, setting the global msqid that can be listened on.*/void ipc_init(msgpp)     struct msgbuf **msgpp;{  key_t key;			/* messge key */  char buf[GSERV_BUFSZ];	/* pathname for key */  int p;			/* child process id */  sprintf(buf,"/tmp/gsrv%d",geteuid());  creat(buf,0600);  key = ftok(buf,1);  if ((ipc_qid = msgget(key,0600|IPC_CREAT)) == -1) {    perror(progname);    fprintf(stderr,"%s: unable to create msg queue\n",progname);    ipc_exit(1);  }; /* if */  ipc_spawn_watchdog();  signal(SIGTERM,ipc_handle_signal);  signal(SIGINT,ipc_handle_signal);  if ((*msgpp = (struct msgbuf *)                 malloc(sizeof **msgpp + GSERV_BUFSZ)) == NULL) {    fprintf(stderr,	    "%s: unable to allocate space for message buffer\n",progname);    ipc_exit(1);  }; /* if */} /* ipc_init *//*  handle_ipc_request -- accept a request from a client, pass the request on  			to the GNU Emacs process, then wait for its reply and			pass that on to the client.*/void handle_ipc_request(msgp)     struct msgbuf *msgp;	/* message buffer */{  struct msqid_ds msg_st;	/* message status */  char buf[GSERV_BUFSZ];  int len;			/* length of message / read */  int s, result_len;            /* tag fields on the response from emacs */  int junk;			/* junk value */  int offset = 0;  int total = 1;                /* # bytes that will actually be sent off */  if ((len = msgrcv(ipc_qid,msgp,GSERV_BUFSZ-1,1,0)) < 0) {    perror(progname);    fprintf(stderr,"%s: unable to receive\n",progname);    ipc_exit(1);  }; /* if */  msgctl(ipc_qid,IPC_STAT,&msg_st);  strncpy(buf,msgp->mtext,len);  buf[len] = '\0';		/* terminate */    printf("%d %s",ipc_qid,buf);  fflush(stdout);  /* now for the response from gnu */  msgp->mtext[0] = '\0';#if 0  if ((len = read(0,buf,GSERV_BUFSZ)) < 0) {    perror(progname);    fprintf(stderr,"%s: unable to read\n",progname);    ipc_exit(1);  }; /* if */        sscanf(buf,"%d:%[^\n]\n",&junk,msgp->mtext);#else   /* read in "n/m:" (n=client fd, m=message length) */  while (offset < GSERV_BUFSZ && 	 ((len = read(0,buf+offset,1)) > 0) &&	 buf[offset] != ':') {    offset += len;  }  if (len < 0) {    perror(progname);    fprintf(stderr,"%s: unable to read\n",progname);    exit(1);  }        /* parse the response from emacs, getting client fd & result length */  buf[offset] = '\0';  sscanf(buf,"%d/%d", &s, &result_len);  while (result_len > 0) {    if ((len = read(0,buf,min2(result_len, GSERV_BUFSZ - 1))) < 0) {      perror(progname);      fprintf(stderr,"%s: unable to read\n",progname);      exit(1);    }    /* Send this string off, but only if we have enough space */     if (GSERV_BUFSZ > total) {      if (total + len <= GSERV_BUFSZ)	buf[len] = 0;      else 	buf[GSERV_BUFSZ - total] = 0;      send_string(s,buf);      total += strlen(buf);    };    result_len -= len;  }  /* eat the newline */  while ((len = read(0,buf,1)) == 0)    ;  if (len < 0) {    perror(progname);    fprintf(stderr,"%s: unable to read\n",progname);    exit(1);  }  if (buf[0] != '\n') {    fprintf(stderr,"%s: garbage after result [%c]\n",progname, buf[0]);    exit(1);  }#endif  /* Send a response back to the client. */  msgp->mtype = msg_st.msg_lspid;  if (msgsnd(ipc_qid,msgp,strlen(msgp->mtext)+1,0) < 0)    perror("msgsend(gnuserv)");} /* handle_ipc_request */#endif /* SYSV_IPC */#if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)/*  echo_request -- read request from a given socket descriptor, and send the information                  to stdout (the gnu process).*/void echo_request(s)int s;				/* socket */{  char buf[GSERV_BUFSZ];  int len;  printf("%d ",s);    /* read until we get a newline or no characters */  while ((len = recv(s,buf,GSERV_BUFSZ,0)) > 0) {    buf[len] = '\0';    printf("%s",buf);    if (buf[len-1] == EOT_CHR) {      fflush(stdout);      break;			/* end of message */    }  }; /* while */  if (len < 0) {    perror(progname);    fprintf(stderr,"%s: unable to recv\n",progname);    exit(1);  }; /* if */  } /* echo_request *//*  handle_response -- accept a response from stdin (the gnu process) and pass the                     information on to the relevant client.*/void handle_response(){  char buf[GSERV_BUFSZ+1];  char response[GSERV_BUFSZ+1];  int offset=0;  int s;  int len;  int result_len;  /* read in "n/m:" (n=client fd, m=message length) */  while (offset < GSERV_BUFSZ && 	 ((len = read(0,buf+offset,1)) > 0) &&	 buf[offset] != ':') {    offset += len;  }  if (len < 0) {    perror(progname);    fprintf(stderr,"%s: unable to read\n",progname);    exit(1);  }        /* parse the response from emacs, getting client fd & result length */  buf[offset] = '\0';  sscanf(buf,"%d/%d", &s, &result_len);  while (result_len > 0) {    if ((len = read(0,buf,min2(result_len,GSERV_BUFSZ))) < 0) {      perror(progname);      fprintf(stderr,"%s: unable to read\n",progname);      exit(1);    }    buf[len] = '\0';    send_string(s,buf);    result_len -= len;  }  /* eat the newline */  while ((len = read(0,buf,1)) == 0)    ;  if (len < 0) {    perror(progname);    fprintf(stderr,"%s: unable to read\n",progname);    exit(1);  }  if (buf[0] != '\n') {    fprintf(stderr,"%s: garbage after result\n",progname);    exit(1);  }  close(s);} /* handle_response */#endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */#ifdef INTERNET_DOMAIN_SOCKETSstruct entry {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频欧美精品| 成人高清免费观看| 舔着乳尖日韩一区| 一区二区日韩电影| 亚洲天堂免费看| 亚洲欧美乱综合| 亚洲另类色综合网站| 日韩美女视频一区二区| 国产精品女主播在线观看| 中文字幕久久午夜不卡| 欧美激情资源网| 亚洲欧洲国产日本综合| 亚洲免费观看高清| 亚洲va国产va欧美va观看| 亚洲高清在线视频| 美女视频一区二区三区| 国产资源在线一区| 成人午夜视频网站| 色综合久久久久综合体| 欧美色精品在线视频| 这里只有精品电影| 欧美精品一区二区高清在线观看| 久久综合九色综合97婷婷| 久久久久久亚洲综合影院红桃 | 欧美系列在线观看| 欧美精品高清视频| 久久久久久久精| 国产精品久久久久婷婷| 亚洲午夜久久久久| 国产一区二区精品久久91| 成熟亚洲日本毛茸茸凸凹| 色猫猫国产区一区二在线视频| 欧美日韩精品一区二区在线播放| 精品久久久网站| 日韩美女视频一区二区| 六月丁香婷婷久久| 91亚洲国产成人精品一区二三| 欧美男男青年gay1069videost| 国产精品国模大尺度视频| 亚洲人成人一区二区在线观看| 视频一区二区国产| 国产精品69久久久久水密桃| 欧洲精品一区二区| 久久精品视频网| 天堂蜜桃91精品| 成人18精品视频| 日韩欧美精品在线| 一区二区三区国产| 懂色av一区二区三区免费观看| 欧美日韩一区不卡| 中文字幕一区二区三区乱码在线| 免费欧美日韩国产三级电影| 91在线观看高清| 中文一区在线播放 | 在线成人小视频| 国产精品久久福利| 国产精品一级片| 欧美大片免费久久精品三p| 中文字幕日韩一区| 处破女av一区二区| 久久只精品国产| 日本不卡高清视频| 欧美日韩mp4| 亚洲伊人色欲综合网| www.色精品| 国产欧美va欧美不卡在线 | 337p日本欧洲亚洲大胆精品 | 欧美一区二区女人| 亚洲成人一区在线| 欧美专区日韩专区| 一区二区三区在线观看动漫| 成人av先锋影音| 国产精品久久久久天堂| 国产成人精品影视| 中文字幕中文字幕一区二区| 国产成人福利片| 国产日韩成人精品| 成人性色生活片| 国产夜色精品一区二区av| 精品一区二区三区在线观看国产 | 中文字幕视频一区二区三区久| 国产精品原创巨作av| 久久亚区不卡日本| 国产成人在线观看免费网站| 国产欧美日本一区视频| 成人动漫av在线| 亚洲精品中文字幕在线观看| 91成人免费在线| 亚洲aⅴ怡春院| 欧美一区二区免费视频| 久久99久国产精品黄毛片色诱| 亚洲精品在线三区| 成人一区二区视频| 亚洲美女电影在线| 欧美日韩国产一区二区三区地区| 秋霞电影网一区二区| 26uuu久久天堂性欧美| 国产91色综合久久免费分享| 亚洲欧洲在线观看av| 欧美综合色免费| 日本91福利区| 国产精品久久久久久久久图文区 | 亚洲三级在线观看| 欧美美女直播网站| 精品一二线国产| **性色生活片久久毛片| 欧美日韩国产片| 顶级嫩模精品视频在线看| 亚洲日本va在线观看| 日韩一区二区麻豆国产| 国产成人av一区二区三区在线观看| 国产精品白丝在线| 欧美一级黄色大片| 不卡的电影网站| 免费在线看成人av| 一区二区三国产精华液| 亚洲精品一区二区三区蜜桃下载| 成人爽a毛片一区二区免费| 亚洲成人在线观看视频| www亚洲一区| 欧美日本一区二区三区| 成人va在线观看| 美女精品自拍一二三四| 亚洲激情av在线| 亚洲国产精品t66y| 欧美一级欧美一级在线播放| 日本精品一区二区三区四区的功能| 免费一级欧美片在线观看| 亚洲欧美国产三级| 国产亚洲欧美日韩日本| 欧美一级黄色大片| 欧美主播一区二区三区| 成人av网址在线观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲精品乱码久久久久| 中文字幕欧美国产| 久久综合成人精品亚洲另类欧美| 欧美精品乱人伦久久久久久| 99久久精品免费精品国产| 国内精品免费**视频| 亚洲超碰97人人做人人爱| 亚洲嫩草精品久久| 中文字幕日韩精品一区| 国产区在线观看成人精品 | jizz一区二区| 国产成人超碰人人澡人人澡| 久久电影国产免费久久电影| 午夜精品久久久久影视| 亚洲宅男天堂在线观看无病毒| 亚洲欧洲无码一区二区三区| 国产拍欧美日韩视频二区| 精品国产第一区二区三区观看体验| 91麻豆精品91久久久久同性| 欧美性极品少妇| 欧美视频在线一区二区三区| 日本韩国一区二区三区视频| 色婷婷久久综合| 欧美日韩一区二区三区在线看 | 7777精品久久久大香线蕉| 欧美伊人精品成人久久综合97| 在线视频欧美区| 欧美日韩一二区| 91精品国产综合久久香蕉的特点| 欧美日韩三级一区二区| 91精品一区二区三区久久久久久| 欧美精品 国产精品| 日韩欧美国产精品一区| 久久久久99精品国产片| 中文字幕制服丝袜成人av| 一区二区视频在线看| 亚洲444eee在线观看| 久草这里只有精品视频| 国产精品亚洲综合一区在线观看| jiyouzz国产精品久久| 91浏览器打开| 欧美一区二区三区影视| 久久久久久亚洲综合| 亚洲欧美一区二区三区久本道91 | 国产99精品国产| 色狠狠av一区二区三区| 欧美一区欧美二区| 久久嫩草精品久久久精品一| 椎名由奈av一区二区三区| 视频在线观看一区二区三区| 国产麻豆视频一区二区| 日本乱人伦一区| 久久综合成人精品亚洲另类欧美| 国产精品色在线观看| 三级在线观看一区二区| 国产福利一区二区三区在线视频| 色999日韩国产欧美一区二区| 欧美一级黄色录像| 亚洲日本护士毛茸茸| 精品在线视频一区| 一本大道久久精品懂色aⅴ| 日韩欧美精品在线视频| 亚洲欧美一区二区三区极速播放| 国产成人av一区二区三区在线| 色94色欧美sute亚洲线路二| 精品99一区二区|