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

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

?? imore.cpp

?? 最新的版本ACE-5.6.8,剛從外文網(wǎng)上搬下,與大家分享.
?? CPP
字號(hào):
// ============================================================================
// $Id: imore.cpp 82543 2008-08-06 18:21:48Z parsons $
//
// = LIBRARY
//    examples
//
// = FILENAME
//    imore.cpp (imore stands for indirect more.)
//
// = DESCRIPTION
//    This program demonstrates how to redirect stdout of a parent
//    process to the stdin of its child process using either unnamed pipe
//    or named pipes to relay data to subprocess which runs "more" to
//    display data on the screen.  Run imore to see how to use this
//    program.
//
//    Unfortunately, on Win32, this program doesn't use any pipe at all because
//    using pipes confuses MORE.COM on Win32 and it just acts like "cat" on Unix.
//
// = AUTHOR
//    Nanbor Wang <nanbor@cs.wustl.edu>
//
// ============================================================================

#include "ace/OS_NS_stdio.h"
#include "ace/OS_NS_errno.h"
#include "ace/OS_NS_unistd.h"
#include "ace/OS_NS_fcntl.h"
#include "ace/FIFO_Recv.h"
#include "ace/FIFO_Send.h"
#include "ace/Pipe.h"
#include "ace/Get_Opt.h"
#include "ace/Log_Msg.h"
#include "ace/Process.h"
#include "ace/Signal.h"

ACE_RCSID(Process, imore, "$Id: imore.cpp 82543 2008-08-06 18:21:48Z parsons $")

#if defined (ACE_WIN32)
static const ACE_TCHAR *executable = ACE_TEXT("MORE.COM");
static const ACE_TCHAR *rendezvous_dir = ACE_TEXT("c:/temp");
static const ACE_TCHAR *rendezvous_pfx = ACE_TEXT("imore");
#else
static const char * executable = "more"; // I like less better.
static const ACE_TCHAR *rendezvous_dir = ACE_TEXT("/tmp");
static const ACE_TCHAR *rendezvous_pfx = ACE_TEXT("imore");
#endif /* ACE_WIN32 */

static ACE_TCHAR *fname = 0;   // File you want to view.
static int use_named_pipe = 0; // Do we want to use named pipe?

static void
usage (void)
{
  ACE_ERROR ((LM_ERROR, "Usage: imore [-n|-u] <filename>\n"
              "\t-n Use named pipe.\n"
              "\t-u Use unnamed pipe.\n"));
}

static int
parse_args (int argc, ACE_TCHAR **argv)
{
  ACE_Get_Opt get_opt (argc, argv, ACE_TEXT("un"));
  int c;

  while ((c = get_opt ()) != -1)
    {
    switch (c)
      {
      case 'n': // We want to use named pipe.
#if !defined (ACE_WIN32)
        use_named_pipe = 1;
#else
        ACE_ERROR_RETURN ((LM_ERROR, "Named pipes not supported on Win32\n"), -1);
#endif /* !ACE_WIN32 */
        break;
      case 'u':  // Use unnamed pipe.
        use_named_pipe = 0;
        break;
      default:  // What are you talking about?
        usage ();
        return -1;
      }
    }

  if (get_opt.opt_ind () >= argc) // Do you forget to give me a filename to "more?"
    {
      usage ();
      return -1;
    }
  else
    fname = argv[get_opt.opt_ind ()]; // Alright.

  return 0;
}

static int
setup_named_pipes (ACE_Process_Options &opt)
{
  // Create a unique temporary name for named pipe.
  ACE_TCHAR *rendezvous = ACE_OS::tempnam (rendezvous_dir,
                                           rendezvous_pfx);

  // Out of memory?
  if (rendezvous == 0)
    return -1;

  // Alright, this is indeed strange.  Named pipes are meant to be
  // used for unrelated processes.  Because of the constraints in
  // ACE_Process, I have to pre-open the named pipes here.
  ACE_FIFO_Recv rfifo;          // read end fifo.
  ACE_FIFO_Send wfifo;          // write end fifo.

  // Check if the pipes are created successfully.
  if (rfifo.open (rendezvous) == -1 || wfifo.open (rendezvous) == -1)
    {
      ACE_OS::free (rendezvous);
      ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "fifo.open"), -1);
    }

  // Remove (rm, del) the file after no one uses it any more.
  ACE_OS::unlink (rendezvous);
  ACE_OS::free (rendezvous);

  // Setting up pipe between parent and child process.  Use the read
  // end of the named pipe as child process'es ACE_STDIN.
  // ACE_Process_Options will keep copies (by dup) of fd's that we
  // pass in.  Notice that we have to specify child process to use
  // ACE_STDOUT for output explicitly because we'll close it down in
  // the line after.  Child process will use whatever we use to dup2
  // ACE_STDOUT as its stdout.
  opt.set_handles (rfifo.get_handle (), ACE_STDOUT);

  // The previous keep a copy of original ACE_STDOUT fd, now we
  // can replace ACE_STDOUT of parent process to the write end
  // of the named pipe.
  ACE_OS::dup2 (wfifo.get_handle (), ACE_STDOUT);

  // Close unused fd's.  Notice ACE_FIFO doesn't close the fd
  // when it goes out of scope.
  rfifo.close ();
  wfifo.close ();
  return 0;
}

static int
setup_unnamed_pipe (ACE_Process_Options &opt)
{
  // Create an unnamed pipe instance.
  ACE_Pipe pipe;

  // Check if the pipe is created successfully.
  if (pipe.open () == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "pipe.open"), -1);

  // Setting up pipe between parent and child process.  Use the pipe
  // as child process'es ACE_STDIN.  ACE_Process_Options will keep
  // copies (by dup) of fd's that we pass in.  Notice that we have to
  // specify child process to use ACE_STDOUT for output explicitly
  // because we'll close it down in the line after.  Child process
  // will use whatever we use to dup2 ACE_STDOUT as its stdout.
  opt.set_handles (pipe.read_handle (), ACE_STDOUT);

  // The previous keep a copy of original ACE_STDOUT fd, now we
  // can replace ACE_STDOUT of parent process to the pipe.
  ACE_OS::dup2 (pipe.write_handle (), ACE_STDOUT);

  // Don't forget to close the unused fd.
  pipe.close ();
  return 0;
}

static int
print_file (ACE_HANDLE infd)
{
  char buffer[BUFSIZ];
  ssize_t len;

  while ((len = ACE_OS::read (infd, buffer, BUFSIZ)) > 0)
    {
      if ((ACE_OS::write (ACE_STDOUT, buffer, len) != len))
        {
          if (errno == EPIPE)
           {
              // I tried to "produce" EPIPE warning to test
              // the program but never seen one.  (odd.)
              // ACE_ERROR ((LM_ERROR, "\n\nEPIPE\n"));
              break;
            }
          else
            {
              ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "write"), -1);
            }
        }
    }
    
  return 0;
}

int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  // Ignore SIGPIPE signal on Unix platforms in case
  // child process (more) terminates before we finish
  // writing to stdout.
#if !defined (ACE_WIN32)
  ACE_Sig_Action sig_act (SIG_IGN);
  if (sig_act.register_action (SIGPIPE) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "ACE_Sig_Action::register_action"), -1);
#endif /* ACE_WIN32 */

  // Alright, what you want me to do now?
  if (::parse_args (argc, argv) == -1)
    return -1;

  // Can I find the file you want?
  ACE_HANDLE infile = ACE_OS::open (fname, O_RDONLY);
  if (infile == ACE_INVALID_HANDLE)
      ACE_ERROR_RETURN ((LM_DEBUG, "%p\n", fname), -1);

  ACE_Process new_process;

  // The ACE_Process_Options does not need to be enclosed in a block
  // because it does not close the file handles, the ACE_Process closes
  // them upon destruction.
#if !defined (ACE_WIN32)
  ACE_Process_Options options;

  if ((use_named_pipe ? ::setup_named_pipes :
       ::setup_unnamed_pipe) (options) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "Error, bailing out!\n"), -1);

  options.command_line (executable);
  if (new_process.spawn (options) == -1)
    {
      int error = ACE_OS::last_error ();
      ACE_ERROR_RETURN ((LM_ERROR, "%p errno = %d.\n",
                         "test_more", error), -1);
    }

  // write file to ACE_STDOUT.
  if (::print_file (infile) == -1)
    ACE_ERROR_RETURN ((LM_ERROR, "Error, bailing out!\n"), -1);

  // Close the STDOUT to inform child eof.
  ACE_OS::close (ACE_STDOUT);
#else
  // We can only pass a file handler directly to child process
  // otherwise "more" doesn't act quite the way we want.  Nonetheless,
  // if your child process don't need to interact with the terminal,
  // we can use the exact code for Unixes on NT.
  ACE_Process_Options options;
  options.command_line (executable);
  options.set_handles (infile);
  if (new_process.spawn (options) == -1)
    {
      int error = ACE_OS::last_error ();
      ACE_ERROR_RETURN ((LM_ERROR, "%p errno = %d.\n",
                         "test_more", error), -1);
    }
#endif /* ! ACE_WIN32 */

  // Wait till we are done.
  ACE_exitcode status;
  new_process.wait (&status);
  ACE_DEBUG ((LM_DEBUG, "Process exit with status %d\n", status));

  ACE_OS::close (infile);

  return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费看| 欧美经典一区二区三区| 色综合天天视频在线观看| 国产精品99久久久久久宅男| 看片网站欧美日韩| 日韩avvvv在线播放| 国产揄拍国内精品对白| 美女诱惑一区二区| 狠狠色丁香久久婷婷综| 国产精品亚洲人在线观看| 成人自拍视频在线| 成人免费视频网站在线观看| 91小视频免费观看| 欧洲激情一区二区| 91麻豆精品91久久久久久清纯| 欧美日韩日本视频| 日韩欧美一二三四区| 久久众筹精品私拍模特| 中文字幕免费不卡| 一区二区三区不卡视频在线观看| 亚洲午夜激情av| 美国av一区二区| 国产v综合v亚洲欧| 欧美日韩国产一级| 欧美成人艳星乳罩| 国产精品三级在线观看| 亚洲国产一区视频| 国产乱码精品1区2区3区| 99久久精品免费看国产免费软件| 欧美调教femdomvk| 久久免费视频色| 亚洲激情在线播放| 经典三级视频一区| 色婷婷狠狠综合| 日韩精品一区二区在线观看| 亚洲欧洲日产国码二区| 日韩精品一二区| av在线免费不卡| 欧美v日韩v国产v| 一区二区三区在线视频免费| 久久99国产精品成人| 一本一道波多野结衣一区二区| 欧美一区二区三区在线观看 | 亚洲三级在线免费观看| 首页国产欧美久久| 色哟哟国产精品免费观看| 精品欧美一区二区三区精品久久 | 欧美久久一二区| 国产精品国产三级国产专播品爱网| 午夜久久久久久久久| 成人精品小蝌蚪| 久久这里只有精品6| 午夜电影网亚洲视频| 色先锋资源久久综合| 国产亚洲视频系列| 老鸭窝一区二区久久精品| 色综合久久久久综合99| 久久精品国产一区二区| 91传媒视频在线播放| 国产精品蜜臀av| 国产精品亚洲综合一区在线观看| 制服.丝袜.亚洲.另类.中文 | 91在线视频在线| 中文字幕精品在线不卡| 国内精品国产三级国产a久久| 欧美日韩视频在线观看一区二区三区| 国产精品美女久久久久久| 国产精品主播直播| 精品国产免费一区二区三区香蕉| 午夜私人影院久久久久| 在线免费观看视频一区| 亚洲色图欧美偷拍| 99精品热视频| 亚洲乱码国产乱码精品精98午夜 | 中文字幕欧美一| 丰满少妇在线播放bd日韩电影| 久久人人97超碰com| 久久99久国产精品黄毛片色诱| 日韩一区国产二区欧美三区| 日韩中文字幕91| 精品少妇一区二区三区在线视频| 麻豆成人免费电影| 久久中文字幕电影| 国产99久久久国产精品| 国产精品剧情在线亚洲| 色综合网站在线| 婷婷丁香久久五月婷婷| 日韩视频在线永久播放| 国内精品伊人久久久久av影院| 亚洲mv在线观看| 在线播放日韩导航| 激情六月婷婷久久| 中文字幕一区二区三区在线观看| 91蜜桃免费观看视频| 亚洲国产综合91精品麻豆| 91精品婷婷国产综合久久| 国精产品一区一区三区mba视频| 国产日韩影视精品| 欧亚洲嫩模精品一区三区| 偷拍日韩校园综合在线| 精品sm捆绑视频| 99久久国产综合精品女不卡| 亚洲精选视频免费看| 日韩欧美亚洲国产另类| 国产91色综合久久免费分享| 亚洲综合清纯丝袜自拍| 日韩三级高清在线| 成人精品在线视频观看| 亚洲一区二区在线播放相泽| 日韩欧美中文字幕制服| 99国产欧美久久久精品| 日韩黄色一级片| 国产精品不卡一区| 日韩一区二区在线播放| 不卡视频免费播放| 日本午夜一区二区| 1区2区3区国产精品| 26uuu亚洲综合色| 在线观看亚洲一区| 国产精品一二三在| 日韩**一区毛片| 亚洲日本在线视频观看| 久久―日本道色综合久久| 久久香蕉国产线看观看99| 日本久久一区二区三区| 国产成人综合在线观看| 亚洲高清视频中文字幕| 综合电影一区二区三区 | 成人欧美一区二区三区1314| 欧美变态tickle挠乳网站| 色综合久久久久久久久| 国产成人精品影院| 国内不卡的二区三区中文字幕| 亚洲一区二区精品视频| 亚洲欧美欧美一区二区三区| 久久精品一区二区三区不卡牛牛| 欧美欧美午夜aⅴ在线观看| 色综合久久99| 99久久99久久精品国产片果冻 | 欧美在线观看一区| 99久久精品国产导航| www.综合网.com| 成人av免费在线观看| 国产精品白丝jk白祙喷水网站| 久久99国内精品| 精品在线一区二区三区| 六月丁香婷婷色狠狠久久| 免费欧美在线视频| 男女激情视频一区| 日韩av在线发布| 日韩av电影免费观看高清完整版在线观看 | 久久久久久久久久看片| 精品国产不卡一区二区三区| 日韩免费观看高清完整版 | 日本一区二区三区四区在线视频| 久久免费午夜影院| 日本一区二区三区dvd视频在线| 久久精品日产第一区二区三区高清版 | 欧美一区永久视频免费观看| 欧美电影在线免费观看| 欧美日韩视频不卡| 欧美一区二区女人| 精品国产区一区| 久久精品夜夜夜夜久久| 国产免费成人在线视频| 综合自拍亚洲综合图不卡区| 一区二区三区资源| 天天影视涩香欲综合网| 日韩不卡手机在线v区| 久久99热国产| 成人av综合一区| 欧美性videosxxxxx| 555夜色666亚洲国产免| 精品国产sm最大网站免费看| 国产精品成人免费在线| 亚洲观看高清完整版在线观看| 蜜臀av亚洲一区中文字幕| 国产乱码精品一区二区三区av| caoporen国产精品视频| 欧美三级视频在线播放| 精品国产123| 一区二区在线看| 捆绑调教一区二区三区| 91一区二区三区在线观看| 中文字幕欧美日韩一区| 日韩一区在线播放| 日日夜夜免费精品| 成人a级免费电影| 日韩一区二区三区免费观看| 国产精品美女久久久久久久久 | 五月婷婷综合网| 国产精品一区二区在线播放 | 91蜜桃视频在线| 日韩欧美高清在线| 亚洲视频免费在线| 精品在线观看视频| 欧美日韩一区二区在线观看视频 | 久久国产夜色精品鲁鲁99| 91免费看片在线观看| 精品国内二区三区|