summaryrefslogtreecommitdiff
path: root/ACE/examples/OS
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/OS')
-rw-r--r--ACE/examples/OS/Makefile.am13
-rw-r--r--ACE/examples/OS/Process/Makefile.am54
-rw-r--r--ACE/examples/OS/Process/OS_Process.mpc17
-rw-r--r--ACE/examples/OS/Process/README54
-rw-r--r--ACE/examples/OS/Process/imore.cpp266
-rw-r--r--ACE/examples/OS/Process/process.cpp587
6 files changed, 0 insertions, 991 deletions
diff --git a/ACE/examples/OS/Makefile.am b/ACE/examples/OS/Makefile.am
deleted file mode 100644
index 7547a62a438..00000000000
--- a/ACE/examples/OS/Makefile.am
+++ /dev/null
@@ -1,13 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## $Id$
-##
-## This file was generated by MPC. Any changes made directly to
-## this file will be lost the next time it is generated.
-##
-## MPC Command:
-## ./bin/mwc.pl -type automake -noreldefs ACE.mwc
-
-SUBDIRS = \
- Process
-
diff --git a/ACE/examples/OS/Process/Makefile.am b/ACE/examples/OS/Process/Makefile.am
deleted file mode 100644
index 70dec285bde..00000000000
--- a/ACE/examples/OS/Process/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-## Process this file with automake to create Makefile.in
-##
-## $Id$
-##
-## This file was generated by MPC. Any changes made directly to
-## this file will be lost the next time it is generated.
-##
-## MPC Command:
-## ./bin/mwc.pl -type automake -noreldefs ACE.mwc
-
-ACE_BUILDDIR = $(top_builddir)
-ACE_ROOT = $(top_srcdir)
-
-noinst_PROGRAMS =
-
-## Makefile.OS_Process_Imore.am
-
-if !BUILD_ACE_FOR_TAO
-
-noinst_PROGRAMS += imore
-
-imore_CPPFLAGS = \
- -I$(ACE_ROOT) \
- -I$(ACE_BUILDDIR)
-
-imore_SOURCES = \
- imore.cpp
-
-imore_LDADD = \
- $(ACE_BUILDDIR)/ace/libACE.la
-
-endif !BUILD_ACE_FOR_TAO
-
-## Makefile.OS_Process_Process.am
-
-noinst_PROGRAMS += process
-
-process_CPPFLAGS = \
- -I$(ACE_ROOT) \
- -I$(ACE_BUILDDIR)
-
-process_SOURCES = \
- process.cpp
-
-process_LDADD = \
- $(ACE_BUILDDIR)/ace/libACE.la
-
-## Clean up template repositories, etc.
-clean-local:
- -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.*
- -rm -f gcctemp.c gcctemp so_locations *.ics
- -rm -rf cxx_repository ptrepository ti_files
- -rm -rf templateregistry ir.out
- -rm -rf ptrepository SunWS_cache Templates.DB
diff --git a/ACE/examples/OS/Process/OS_Process.mpc b/ACE/examples/OS/Process/OS_Process.mpc
deleted file mode 100644
index ea2e08ec454..00000000000
--- a/ACE/examples/OS/Process/OS_Process.mpc
+++ /dev/null
@@ -1,17 +0,0 @@
-// -*- MPC -*-
-// $Id$
-
-project(*imore) : aceexe {
- avoids += ace_for_tao
- exename = imore
- Source_Files {
- imore.cpp
- }
-}
-project(*process) : aceexe {
- avoids += wince
- exename = process
- Source_Files {
- process.cpp
- }
-}
diff --git a/ACE/examples/OS/Process/README b/ACE/examples/OS/Process/README
deleted file mode 100644
index c22757eb73f..00000000000
--- a/ACE/examples/OS/Process/README
+++ /dev/null
@@ -1,54 +0,0 @@
-This directory contains two examples: <imore> and <process>. They
-show how you can play with various features of ACE_Process to create
-new processes.
-
-imore:
------
-This example shows how to redirect the output of one process (in our
-case, the parent process) to another process (child process.) This is
-very similiar what a UNIX shell does when we "pipe" command together.
-You can select whether you want to use named pipes or a unnamed pipe.
-
-
-process:
---------
-
-This example shows how to use ACE_Process to "portably" create new
-processes. The ACE_Process_Options class allows applications to
-portably specify path, command-line arguments, environment variable
-values. It also allows applications to set the new process' standard
-handles (stdin, stdout, and stderr). ACE_Process is created with the
-ACE_Process_Options and can be used to perform operations on the
-running process.
-
-Notice that this example uses NT version's UNIX utilities like
-"DATE.EXE," and "ls.exe." You can find where to get them from
-Microsoft's NT page on the Web.
-
-Run the application as ./process -u to get all the command-line
-options.
-
-Here's an example output:
-
-lambada:OS/Process> ./process -a
-starting...
-starting...
-Sun May 11 15:06:51 CDT 1997
-date succeeded.
-starting...
-checking ACE_PROCESS_TEST
-ACE_PROCESS_TEST = here's a large number 4294967295.
-ACE_PROCESS_TEST2 = ophilli.
-total 600
-drwxr-xr-x 5 harrison doc 512 May 11 15:06 .
-drwxr-xr-x 4 harrison doc 512 Apr 21 15:32 ..
-drwx------ 2 harrison doc 512 May 8 22:33 .obj
-drwx------ 2 harrison doc 512 May 8 22:33 .shobj
-drwxr-xr-x 2 harrison doc 512 May 11 15:05 CVS
--rw-r--r-- 1 harrison doc 1717 Oct 21 1996 Makefile
--rw-r--r-- 1 harrison doc 10048 Oct 21 1996 Process.mak
--rw-r--r-- 1 harrison doc 44032 Oct 21 1996 Process.mdp
--rw-r--r-- 1 harrison doc 1452 May 11 15:05 README
--rwx--x--x 1 harrison doc 212992 May 11 15:06 process
--rw-r--r-- 1 harrison doc 10172 May 10 19:38 process.cpp
--rw------- 1 harrison doc 1380 May 10 19:19 process.wst
diff --git a/ACE/examples/OS/Process/imore.cpp b/ACE/examples/OS/Process/imore.cpp
deleted file mode 100644
index 12913d3993c..00000000000
--- a/ACE/examples/OS/Process/imore.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-// ============================================================================
-// $Id$
-//
-// = 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$")
-
-#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;
-}
diff --git a/ACE/examples/OS/Process/process.cpp b/ACE/examples/OS/Process/process.cpp
deleted file mode 100644
index ef4359b7df5..00000000000
--- a/ACE/examples/OS/Process/process.cpp
+++ /dev/null
@@ -1,587 +0,0 @@
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// examples
-//
-// = FILENAME
-// process.cpp
-//
-// = DESCRIPTION
-// This example tests the <ACE_Process>. For more info, check the
-// README file in this directory.
-//
-// = AUTHOR
-// Tim Harrison <harrison@cs.wustl.edu>.
-//
-// ============================================================================
-
-#include "ace/OS_NS_errno.h"
-#include "ace/OS_NS_fcntl.h"
-#include "ace/OS_NS_stdlib.h"
-#include "ace/OS_NS_stdio.h"
-#include "ace/OS_NS_string.h"
-#include "ace/OS_NS_unistd.h"
-#include "ace/Get_Opt.h"
-#include "ace/Process.h"
-#include "ace/Log_Msg.h"
-#include "ace/Time_Value.h"
-#include "ace/SString.h"
-
-ACE_RCSID(Process, process, "$Id$")
-
-#if defined (ACE_WIN32)
-#define EXEC_NAME ACE_TEXT ("MORE.COM")
-const ACE_TCHAR *DATE_PATH = ACE_TEXT ("date.exe");
-const ACE_TCHAR *LS_PATH = ACE_TEXT ("ls.exe");
-const ACE_TCHAR *SLEEP_PATH = ACE_TEXT ("sleep.exe");
-#else
-#define EXEC_NAME ACE_TEXT ("less")
-const ACE_TCHAR *DATE_PATH = ACE_TEXT ("date");
-const ACE_TCHAR *LS_PATH = ACE_TEXT ("ls");
-const ACE_TCHAR *SLEEP_PATH = ACE_TEXT ("sleep");
-#endif /* ACE_WIN32 */
-
-static const ACE_TCHAR *executable = EXEC_NAME;
-static ACE_TCHAR *print_file = 0;
-static ACE_TCHAR *environment_string = 0;
-static int get_env = 0;
-static int run_date = 0;
-static int run_ls = 0;
-static int run_all = 0;
-static int run_setenv = 0;
-static int run_tokenizer = 0;
-static int run_wait = 0;
-
-// Parse the command-line arguments and set options.
-static int
-parse_args (int argc, ACE_TCHAR **argv)
-{
- ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("dlx:p:e:gastuw"));
- int c;
-
- while ((c = get_opt ()) != -1)
- {
- switch (c)
- {
- case 't':
- run_tokenizer = 1;
- break;
- case 's':
- run_setenv = 1;
- break;
- case 'a':
- run_all = 1;
- break;
- case 'd':
- run_date = 1;
- break;
- case 'l':
- run_ls = 1;
- break;
- case 'x':
- executable = get_opt.opt_arg ();
- break;
- case 'p':
- print_file = get_opt.opt_arg ();
- break;
- case 'e':
- environment_string = get_opt.opt_arg ();
- break;
- case 'g':
- get_env = 1;
- break;
- case 'w':
- run_wait = 1;
- break;
- case 'u':
- default:
- ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Usage:\n")
- ACE_TEXT ("-d print date\n")
- ACE_TEXT ("-l run ls\n")
- ACE_TEXT ("-x <executable=more.com>\n")
- ACE_TEXT ("-p print <file_name>\n")
- ACE_TEXT ("-e <env variable message>\n")
- ACE_TEXT ("-s setenv ACE_PROCESS_ENV and spawn -g\n")
- ACE_TEXT ("-g get_env ACE_PROCESS_ENV\n")
- ACE_TEXT ("-t test tokenizer\n")
- ACE_TEXT ("-w test wait functions\n")
- ACE_TEXT ("-a run all (d,l,e \"running\")\n")),
- -1);
- }
- }
-
- return 0;
-}
-
-// This shows how to set handles.
-static void
-test_more (void)
-{
- ACE_HANDLE infile = ACE_OS::open (print_file, O_RDONLY);
-
- if (infile == ACE_INVALID_HANDLE)
- {
- ACE_ERROR ((LM_DEBUG, ACE_TEXT ("%p\n"), print_file));
- return;
- }
-
- ACE_Process new_process;
- 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 ((LM_ERROR,
- ACE_TEXT ("%p errno = %d.\n"),
- ACE_TEXT ("test_more"),
- error));
- }
-
- ACE_exitcode status;
- new_process.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Process exit with status %d\n"),
- status));
- ACE_OS::close (infile);
-
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("More succeeded.\n")));
-}
-
-// This is a simple usage of ACE_Process.
-
-static void
-test_date (void)
-{
- ACE_Process_Options options;
- options.command_line (DATE_PATH);
-
- // Try to create a new process running date.
- ACE_Process new_process;
- if (new_process.spawn (options) == -1)
- {
- int error = ACE_OS::last_error ();
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p errno = %d.\n"),
- ACE_TEXT ("test_date"),
- error));
- return;
- }
-
- ACE_exitcode status;
- new_process.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Process exit with status %d\n"),
- status));
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("date succeeded.\n")));
-}
-
-static void
-test_ls (void)
-{
- ACE_Process_Options options;
-#if defined (ACE_WIN32) || !defined (ACE_USES_WCHAR)
- options.command_line (ACE_TEXT ("%s -al"), LS_PATH);
-#else
- options.command_line (ACE_TEXT ("%ls -al"), LS_PATH);
-#endif
- ACE_Process new_process;
- if (new_process.spawn (options) == -1)
- {
- int error = ACE_OS::last_error ();
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p errno = %d.\n"),
- ACE_TEXT ("test_ls"),
- error));
- }
-
- ACE_exitcode status;
- new_process.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Process exit with status %d\n"),
- status));
-}
-
-static void
-test_wait (void)
-{
- ACE_Process_Options options;
-#if defined (ACE_WIN32) || !defined (ACE_USES_WCHAR)
- options.command_line (ACE_TEXT ("%s 10"), SLEEP_PATH);
-#else
- options.command_line (ACE_TEXT ("%ls 10"), SLEEP_PATH);
-#endif
- ACE_Process process1;
- if (process1.spawn (options) == -1)
- {
- int error = ACE_OS::last_error ();
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p errno = %d.\n"),
- ACE_TEXT ("test_ls"),
- error));
- }
-
- int result;
- ACE_exitcode status;
-
- //FUZZ: disable check_for_lack_ACE_OS
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] New process sleeping 10; try wait(2)\n")));
- //FUZZ: enable check_for_lack_ACE_OS
-
- result = process1.wait (ACE_Time_Value (2), &status);
-
- //FUZZ: disable check_for_lack_ACE_OS
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] wait(2) returns %d(%d)...now try regular wait\n"),
- result,
- status));
- //FUZZ: enable check_for_lack_ACE_OS
-
- result = process1.wait (&status);
-
- //FUZZ: disable check_for_lack_ACE_OS
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] wait() returns %d(%d)\n"),
- result,
- status));
- //FUZZ: enable check_for_lack_ACE_OS
-
- ACE_Process process2;
- if (process2.spawn (options) == -1)
- {
- int error = ACE_OS::last_error ();
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p errno = %d.\n"),
- ACE_TEXT ("test_ls"),
- error));
- }
-
- //FUZZ: disable check_for_lack_ACE_OS
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] New process sleeping 10; try wait(12)\n"),
- status));
- //FUZZ: enable check_for_lack_ACE_OS
-
- result = process2.wait (ACE_Time_Value (12), &status);
-
- //FUZZ: disable check_for_lack_ACE_OS
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] wait(12) returns %d(%d)...now try regular wait\n"),
- result,
- status));
- //FUZZ: enable check_for_lack_ACE_OS
-
- result = process2.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("[%T] wait returns %d(%d)\n"),
- result,
- status));
-}
-
-#if defined (ACE_WIN32)
-// This is just to test the direct usage of CreateProcess. I use this
-// occasionally as a sanity check when ACE_Process breaks.
-static void
-win32_test_ls (void)
-{
- PROCESS_INFORMATION process_info;
- ACE_TEXT_STARTUPINFO startup_info;
- ACE_OS::memset ((void *) &startup_info,
- 0,
- sizeof startup_info);
- ACE_OS::memset ((void *) &process_info,
- 0,
- sizeof process_info);
- startup_info.cb = sizeof startup_info;
- startup_info.dwFlags = STARTF_USESTDHANDLES;
-
- ACE_HANDLE std_out = ACE_STDOUT;
-
- if (!::DuplicateHandle (::GetCurrentProcess (),
- std_out,
- ::GetCurrentProcess (),
- &startup_info.hStdOutput,
- 0,
- TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p duplicate failed.\n"),
- ACE_TEXT ("test_ls")));
- return;
- }
-
- BOOL fork_result =
- ACE_TEXT_CreateProcess (ACE_TEXT ("c:\\Utils\\bin\\ls.exe"),
- ACE_TEXT ("-a"),
- 0, // No process attributes.
- 0, // No thread attributes.
- TRUE, // Allow handle inheritance.
- 0, // CREATE_NEW_CONSOLE, // Create a new console window.
- 0,
- 0, // Current directory to start in.
- &startup_info,
- &process_info);
-
- ::CloseHandle (startup_info.hStdOutput);
-
- if (fork_result == 0)
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p CreateProcess failed.\n"),
- ACE_TEXT ("test_ls")));
- else
- {
- ::WaitForSingleObject (process_info.hProcess,
- INFINITE);
- ACE_DEBUG ((LM_ERROR, ACE_TEXT ("ls succeeded.\n")));
- }
-}
-
-// This code spawns a new process. The new process inherits our
-// existing environment, plus one more. This has to be done by hand
-// since CreateProcess does not allow us to inherit AND add
-// environment variables.
-
-static void
-win32_spawn_environment_process (void)
-{
- PROCESS_INFORMATION process_info;
- ACE_TEXT_STARTUPINFO startup_info;
- ACE_OS::memset ((void *) &startup_info,
- 0,
- sizeof startup_info);
- ACE_OS::memset ((void *) &process_info,
- 0,
- sizeof process_info);
- startup_info.cb = sizeof (startup_info);
- startup_info.dwFlags = STARTF_USESTDHANDLES;
-
- ACE_HANDLE std_in = ACE_STDIN;
- ACE_HANDLE std_out = ACE_STDOUT;
- ACE_HANDLE std_err = ACE_STDERR;
-
- if (!::DuplicateHandle (::GetCurrentProcess(),
- std_out,
- ::GetCurrentProcess(),
- &startup_info.hStdOutput,
- 0,
- TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p duplicate failed.\n"),
- ACE_TEXT ("spawn_environment_process")));
- return;
- }
-
- if (!::DuplicateHandle (::GetCurrentProcess(),
- std_err,
- ::GetCurrentProcess(),
- &startup_info.hStdError,
- 0,
- TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p duplicate failed.\n"),
- ACE_TEXT ("spawn_environment_process")));
- return;
- }
-
- if (!::DuplicateHandle (::GetCurrentProcess(),
- std_in,
- ::GetCurrentProcess(),
- &startup_info.hStdInput,
- 0,
- TRUE,
- DUPLICATE_SAME_ACCESS))
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p duplicate failed.\n"),
- ACE_TEXT ("spawn_environment_process")));
- return;
- }
-
- // Normally, this would be just GetEnvironmentStrings, but it
- // doesn't follow the same rules as the rest of the Win32 API
- ACE_TCHAR *existing_environment = ACE_OS::getenvstrings ();
- ACE_TCHAR environment[10240];
- ACE_OS::sprintf (environment,
- ACE_TEXT("ACE_PROCESS_TEST=%s"),
- environment_string);
-
- int size = 0;
- while (existing_environment[size] != '\0')
- size += ACE_OS::strlen (existing_environment + size) + 1;
-
- ACE_OS::memcpy (environment + (ACE_OS::strlen (environment) + 1),
- existing_environment,
- size);
-
- ACE_TEXT_FreeEnvironmentStrings (existing_environment);
-
- BOOL fork_result =
- ACE_TEXT_CreateProcess (ACE_TEXT ("d:\\harrison\\ACE_wrappers\\examples\\OS\\Process\\process.exe"),
- ACE_TEXT ("process -g"),
- 0, // No process attributes.
- 0, // No thread attributes.
- TRUE, // Allow handle inheritance.
- 0, // CREATE_NEW_CONSOLE, // Create a new console window.
- environment, // Environment.
- //"d:\\harrison\\ACE_wrappers\\examples\\OS\\Process\\",
- 0,
- &startup_info,
- &process_info);
-
- ::CloseHandle (startup_info.hStdOutput);
- ::CloseHandle (startup_info.hStdError);
-
- if (fork_result == 0)
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p.\n"),
- ACE_TEXT ("spawn_environment_process")));
- else
- {
- ::WaitForSingleObject (process_info.hProcess,
- INFINITE);
- ACE_DEBUG ((LM_ERROR,
- ACE_TEXT ("spawn_environment_process succeeded.\n")));
- }
-}
-#endif
-
-static void
-test_setenv (const ACE_TCHAR *argv0)
-{
- ACE_Process_Options options;
- // options.setenv ("ACE_PROCESS_TEST", "here's a really large number: %u", 0 - 1);
- options.setenv (ACE_TEXT ("ACE_PROCESS_TEST= here's a large number %u"),
- 0 - 1);
- options.setenv (ACE_TEXT ("ACE_PROCESS_TEST2"), ACE_TEXT ("ophilli"));
-#if defined (ACE_WIN32) || !defined (ACE_USES_WCHAR)
- options.command_line ("%s -g", argv0);
-#else
- options.command_line ("%ls -g", argv0);
-#endif
- ACE_Process process;
- if (process.spawn (options) == -1)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("%p.\n"),
- ACE_TEXT ("test_setenv")));
- return;
- }
-
- ACE_exitcode status;
- process.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Process exit with status %d\n"),
- status));
-}
-
-// Tests the ACE_Tokenizer.
-static void
-tokenize (ACE_TCHAR *buffer)
-{
- // This tokenizer will replace all spaces with end-of-string
- // characters and will preserve text between "" and '' pairs.
- ACE_Tokenizer parser (buffer);
- parser.delimiter_replace (' ', '\0');
- parser.preserve_designators ('\"', '\"'); // " This quote is for emacs
- parser.preserve_designators ('\'', '\'');
-
- for (const ACE_TCHAR *temp; ;)
- {
- temp = parser.next ();
- if (temp == 0)
- break;
- ACE_DEBUG ((LM_DEBUG, temp));
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n")));
- }
-}
-
-int
-ACE_TMAIN (int argc, ACE_TCHAR *argv[])
-{
- if (ACE_LOG_MSG->open (argv[0]) == -1)
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("cannot open logger!!!\n")));
-
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("starting...\n")));
-
- if (::parse_args (argc, argv) == -1)
- return -1;
-
- if (run_all)
- {
-#if defined (ACE_WIN32) || !defined (ACE_USES_WCHAR)
- const ACE_TCHAR *cmdline = ACE_TEXT ("%s -d -l -s -w");
-#else
- const ACE_TCHAR *cmdline = ACE_TEXT ("%ls -d -l -s -w");
-#endif
- ACE_Process_Options options;
- options.command_line (cmdline, argv[0]);
- ACE_Process process;
- if (process.spawn (options) == -1)
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("%p.\n"),
- ACE_TEXT ("main")),
- -1);
- ACE_exitcode status;
- process.wait (&status);
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Process exit with status %d\n"),
- status));
- }
-
- if (run_date)
- ::test_date ();
-
- if (run_setenv)
- ::test_setenv (argv[0]);
-
- if (get_env)
- {
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("checking ACE_PROCESS_TEST\n")));
- char *value = ACE_OS::getenv ("ACE_PROCESS_TEST");
- char *value2 = ACE_OS::getenv ("ACE_PROCESS_TEST2");
- ACE_DEBUG ((LM_DEBUG,
- "ACE_PROCESS_TEST = %C.\n"
- "ACE_PROCESS_TEST2 = %C.\n",
- value == 0 ? "no value" : value,
- value2 == 0 ? "no value" : value2));
- }
-
- if (run_ls)
- ::test_ls ();
-
- if (run_wait)
- ::test_wait ();
-
-#if defined (ACE_WIN32)
- if (environment_string != 0)
- win32_spawn_environment_process ();
-#endif /* ACE_WIN32 */
-
- if (print_file != 0)
- test_more ();
-
- ACE_TCHAR buf1[30];
- ACE_TCHAR buf2[30];
- ACE_OS::strcpy(buf1, ACE_TEXT (" -f hi honey -g \"I\'m home\""));
- ACE_OS::strcpy(buf2, ACE_TEXT ("\"token 1\"\'token 2\'\"token 3\" "));
-
- if (run_tokenizer)
- {
- tokenize (buf1);
- tokenize (buf2);
- }
-
- return 0;
-}