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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? popen.c

?? Algorithms for Image Processing and Computer Vision Source Code
?? C
字號(hào):
/*
   This is popen() and pclose() for MSDOS.  They were developed using
   Microsoft C, but should port easily to DOS C any compiler.
   
   Original author: pacetti@fl-ngnet.army.mil

   These routines are hacks, that is they SIMULATE thier UNIX
   counterparts.  Since MSDOS and won't allow concurrent process spawning,
   you can't really pipe.  I came up with this nearly stupid way around
   piping because I wanted to have some portability between UNIX and MSDOS.
   I'm probably not the first person to have this idea or implement it, but
   I think I'm the first to give it away for free (no points?!).

   The functions simulate popen() and pclose() by redirecting stdin or
   stdout, then spawning a child processes via system().

   If you popen() for read, the stdout is redirected to a temporary
   file, and the child is spawned.  The stdout is reopened via dup2(), the
   temporary file is opened for read and a file pointer to it is returned.

   If you popen() for write, a temporary file is opened for write, and
   a file pointer to it is returned.  When you pclose(), the stdin is
   redirected to the temporary file and the child is spawned.

   In both cases, pclose() closes and unlinks the temporary file.

   A static linked list of C structures is built to store necessary
   info for all popen()ed files so you can popen() more than one file at
   a time.

   The popen() function will return NULL on an error, or a valid FILE
   *pointer on a successful open.  The pclose() function will return
   negative one (-1) on an error or zero (0) on a successful close.

   The function prototypes are:

   FILE *popen(command, mode)
        char *command, char *mode;

   int pclose(pp)
       FILE *pp;

   Where command is a character string equivilant to a MSDOS command
   line, mode is "r" for read or "w" for write, and pp is a pointer to a
   file opened through popen().

   A main() function has been included for testing purposes, to compile
   it define the preprocessor token TEST at compile time.
 */

#include <io.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* hold file pointer, descriptor, command, mode, temporary file name */
struct pipe_list
  {
    FILE *fp;
    int fd;
    char *command, mode[10], temp_name[13];
    struct pipe_list *next;
  };

/* static, global list pointer */
static struct pipe_list *pl = NULL;

FILE *
popen (cm, md)
     const char *cm, *md;             /* program name, pipe mode */
{
  struct pipe_list *l1, *l2;
  static char *tn = NULL;       /* temporary file basename */

  if (!tn)
    if ((tn = mktemp ("pXXXXXX")) == NULL)
      return (NULL);

  /* make new node */
  if ((l1 = (struct pipe_list *) malloc (sizeof (struct pipe_list))) == NULL)
      return (NULL);

  /* zero out elements to we'll get here */
  l1->fd = 0;
  l1->fp = NULL;
  l1->next = NULL;

  /* if empty list - just grab new node */
  if (!pl)
    pl = l1;
  else
    {
      /* otherwise, find last node in list */
      ++(l1->fd);
      l2 = pl;
      while (l2->next)
        {
          ++(l1->fd);
          l2 = l2->next;
        };
      /* add new node to list */
      l2->next = l1;
    }

  /* stick in elements we know already */
  strcpy (l1->mode, md);
  sprintf (l1->temp_name, "%s.%d", tn, l1->fd);

  /* if can save the program name, build temp file */
  if ((l1->command = strdup (cm)))
    {
      /* if caller wants to read */
      if (l1->mode[0] == 'r')
        {
          /* dup stdout */
          if ((l1->fd = dup (fileno (stdout))) == EOF)
            l1->fp = NULL;
          else if (!(l1->fp = freopen (l1->temp_name, "wb", stdout)))
            l1->fp = NULL;
          else
            /* exec cmd */
          if (system (cm) == EOF)
            l1->fp = NULL;
          /* reopen real stdout */
          if (dup2 (l1->fd, fileno (stdout)) == EOF)
            l1->fp = NULL;
          else
            /* open file for reader */
            l1->fp = fopen (l1->temp_name, l1->mode);
        }
      else
        /* if caller wants to write */
      if (l1->mode[0] == 'w')
        /* open temp file */
        l1->fp = fopen (l1->temp_name, l1->mode);
      else
        /* unknown mode */
        l1->fp = NULL;
    }
  return (l1->fp);              /* return == NULL ? ERROR : OK */
}

int
pclose (pp)
     FILE *pp;
{
  struct pipe_list *l1, *l2;    /* list pointers */
  int retval=0;                   /* function return value */

  /* if pointer is first node */
  if (pl->fp == pp)
    {
      /* save node and take it out the list */
      l1 = pl;
      pl = l1->next;
    }
  else
    /* if more than one node in list */
  if (pl->next)
    {
      /* find right node */
      for (l2 = pl, l1 = pl->next; l1; l2 = l1, l1 = l2->next)
        if (l1->fp == pp)
          break;

      /* take node out of list */
      l2->next = l1->next;
    }
  else
    return (-1);

  /* if FILE not in list - return error */
  if (l1->fp == pp)
    {
      /* close the (hopefully) popen()ed file */
      fclose (l1->fp);

      /* if pipe was opened to write */
      if (l1->mode[0] == 'w')
        {
          /* dup stdin */
          if ((l1->fd = dup (fileno (stdin))) == EOF)
            retval = -1;
          else
            /* open temp stdin */
          if (!(l1->fp = freopen (l1->temp_name, "rb", stdin)))
            retval = -1;
          else
            /* exec cmd */
          if (system (l1->command) == EOF)
            retval = -1;
          else
            /* reopen stdin */
          if (dup2 (l1->fd, fileno (stdin)) == EOF)
            retval = -1;
        }
      else
        /* if pipe was opened to read */
      if (l1->mode[0] == 'r')
        retval = 0;
      else
        /* invalid mode */
        retval = -1;
    }
  unlink (l1->temp_name);       /* remove temporary file */
  free (l1->command);           /* dealloc memory */
  free (l1);                    /* dealloc memory */
  l1 = NULL;                    /* make pointer bogus */

  return (retval);              /* retval==0 ? OK : ERROR */
}

#ifdef TEST
/* little test routine - for non-believers (like me).
   Note that it does no diagnostics!  It takes for granted
   that it will work! #define TEST to try it */
main ()
{
  FILE *pp1, *pp2, *pp3, *pp4;

  pp1 = popen ("find \"find\"", "w");
  Write2pipe (pp1);

  pp2 = popen ("dir /w", "r");
  Readfrompipe (pp2);

  pp3 = popen ("more", "w");
  Write2pipe (pp3);

  pp4 = popen ("dir", "r");
  Readfrompipe (pp4);

  pclose (pp1);
  pclose (pp3);
  pclose (pp4);
  pclose (pp2);
}

Write2pipe (pipe)
     FILE *pipe;
{
  char buf[81];
  FILE *pp;

  pp = fopen ("popen.c", "r");

  while (fgets (buf, 80, pp) != NULL)
    fprintf (pipe, "%s", buf);
}
Readfrompipe (pipe)
     FILE *pipe;
{
  char buf[81];

  while (fgets (buf, 80, pipe) != NULL)
    printf ("%s", buf);
}
#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜芽一区二区三区| 欧美日韩成人在线一区| 捆绑调教美女网站视频一区| 亚洲欧美日韩中文播放| 国产精品福利电影一区二区三区四区| 中文字幕亚洲在| 国产欧美一区二区三区鸳鸯浴| 欧美精品一区二区三区蜜桃| 精品剧情v国产在线观看在线| 欧美丰满嫩嫩电影| 日韩精品一区在线观看| 欧美成人综合网站| 久久久精品国产免大香伊| 精品免费一区二区三区| 91精品国产入口| 精品国产伦一区二区三区观看体验| 日韩欧美亚洲国产另类| 精品久久久久久久久久久院品网| 欧美电影免费观看高清完整版在| 欧美tk—视频vk| 欧美激情一区三区| 亚洲精品国产品国语在线app| 一区二区三区在线播| 香蕉久久一区二区不卡无毒影院 | 一区二区三区四区在线免费观看| 亚洲另类中文字| 免费久久精品视频| 风间由美一区二区三区在线观看| 9l国产精品久久久久麻豆| 欧美又粗又大又爽| 日韩精品专区在线影院观看| 中文字幕的久久| 午夜伊人狠狠久久| 国产成人在线视频免费播放| 日本久久精品电影| 久久久久国产精品麻豆ai换脸| 亚洲色图欧美激情| 国产在线精品一区二区| 色久优优欧美色久优优| wwww国产精品欧美| 亚洲国产精品久久人人爱蜜臀| 国产在线精品国自产拍免费| 色综合天天综合网天天狠天天| 欧美不卡一区二区三区| 亚洲免费资源在线播放| 国产成人精品三级麻豆| 欧美二区乱c少妇| 亚洲男女一区二区三区| 国产成人在线视频免费播放| 欧美久久久久久久久| 美腿丝袜亚洲综合| 91香蕉视频污| 欧美一区日本一区韩国一区| 亚洲免费观看高清在线观看| 国产一区久久久| 欧美顶级少妇做爰| 午夜私人影院久久久久| av一二三不卡影片| 久久久久国产精品麻豆| 久久99精品久久久| 这里只有精品视频在线观看| 夜夜精品视频一区二区| 91原创在线视频| 日本一二三四高清不卡| 国产一区二区影院| 久久天堂av综合合色蜜桃网| 日本成人在线看| 制服丝袜亚洲网站| 日欧美一区二区| 欧美日韩亚洲丝袜制服| 一区二区三区高清不卡| 99在线精品视频| 欧美国产日韩精品免费观看| 国产馆精品极品| 久久伊人蜜桃av一区二区| 麻豆精品新av中文字幕| 777a∨成人精品桃花网| 日韩精品国产欧美| 7777精品伊人久久久大香线蕉 | 国产99久久久国产精品潘金| 久久亚洲一级片| 国产美女一区二区三区| 欧美激情综合网| 成人精品免费网站| 日韩码欧中文字| 在线一区二区观看| 午夜视频在线观看一区| 欧美一区二区三区白人| 国产在线视频一区二区三区| 2欧美一区二区三区在线观看视频| 精彩视频一区二区三区| 国产日韩欧美不卡| 91在线免费视频观看| 亚洲一二三区不卡| 欧美一区二区三区男人的天堂| 老司机精品视频线观看86| 国产偷国产偷精品高清尤物| 99re热这里只有精品视频| 亚洲一区日韩精品中文字幕| 欧美一区二区性放荡片| 国产在线播精品第三| 亚洲视频一二区| 欧美日本乱大交xxxxx| 国产一区免费电影| 国产精品人妖ts系列视频| 色屁屁一区二区| 久久精品国产免费| 亚洲九九爱视频| 日韩美女视频在线| 91欧美激情一区二区三区成人| 日韩国产欧美在线视频| 国产免费观看久久| 欧美三级在线播放| 国产成人在线网站| 日韩不卡手机在线v区| 国产精品国产三级国产aⅴ入口| 色婷婷精品久久二区二区蜜臂av | 成人激情文学综合网| 亚洲午夜精品网| 久久精品人人爽人人爽| 欧美日韩一区二区在线观看| 欧美精选一区二区| 国产精品123| 美国欧美日韩国产在线播放| 亚洲人成7777| 国产目拍亚洲精品99久久精品| 欧美日韩国产高清一区二区| 成人精品亚洲人成在线| 六月丁香综合在线视频| 午夜影院久久久| 亚洲免费观看高清完整版在线观看熊| 日韩视频123| 欧美日韩亚洲综合在线| 99久久99久久免费精品蜜臀| 国产美女视频一区| 精品亚洲porn| 性久久久久久久久| 亚洲国产精品一区二区久久| 亚洲欧洲www| 国产欧美精品国产国产专区| 欧美成人vps| 精品卡一卡二卡三卡四在线| 欧美一级久久久久久久大片| 欧美久久久久久久久久| 欧美日韩国产高清一区二区| 欧美日韩亚州综合| 欧美视频一二三区| 欧美三级在线播放| 欧美日韩免费观看一区二区三区| 欧洲一区在线电影| 91成人在线精品| 欧美日韩国产综合一区二区| 欧美体内she精视频| 欧美日韩中文字幕一区| 欧美老人xxxx18| 欧美一区二区三区思思人| 在线播放一区二区三区| 欧美日韩成人一区二区| 欧美日韩成人综合在线一区二区| a4yy欧美一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 日韩高清中文字幕一区| 成人av高清在线| 91免费版在线看| 色久综合一二码| 欧美日韩小视频| 欧美在线制服丝袜| 一本一道波多野结衣一区二区| 91社区在线播放| 色拍拍在线精品视频8848| 欧美日韩一卡二卡三卡| 在线电影欧美成精品| 欧美一卡2卡三卡4卡5免费| 日韩手机在线导航| 欧美成人综合网站| 久久久久国产免费免费| 日本一区二区视频在线| 亚洲精品网站在线观看| 一区二区三区自拍| 欧美一区二区三区性视频| 99国产欧美另类久久久精品| 99久久国产综合精品麻豆| 色噜噜狠狠色综合欧洲selulu| 欧美日韩的一区二区| 91麻豆精品91久久久久久清纯| 欧美伦理视频网站| 欧美tickling网站挠脚心| 国产精品久久久爽爽爽麻豆色哟哟| 17c精品麻豆一区二区免费| 亚洲老司机在线| 日本不卡在线视频| 国产精品一区在线观看乱码 | 久久久一区二区三区| 亚洲乱码日产精品bd| 日本色综合中文字幕| 黄色资源网久久资源365| 色噜噜狠狠一区二区三区果冻| 中文字幕五月欧美| 亚洲成人av电影在线| 蜜桃久久久久久|