⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localexec.cc

📁 This Source-Navigator, an IDE for C/C++/Fortran/Java/Tcl/PHP/Python and a host of other languages.
💻 CC
字号:
// $Header: /cvsroot/sourcenav/src/snavigator/demo/c++_demo/glish/LocalExec.cc,v 1.1.1.1 2002/04/18 23:35:24 mdejong Exp $#include "system.h"#include <stream.h>#include <osfcn.h>#include <errno.h>#include <signal.h>#include <sys/file.h>#include <sys/wait.h>#include <sys/time.h>#include <sys/resource.h>#ifdef HAVE_SIGLIB_H#include <sigLib.h>#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#if HAVE_SYS_WAIT_H#include <sys/wait.h>#endif#ifdef HAVE_VFORK_H#include <vfork.h>#endif#include "LocalExec.h"LocalExec::LocalExec( const char* arg_executable, const char** argv )    : Executable( arg_executable )	{	MakeExecutable( argv );	}LocalExec::LocalExec( const char* arg_executable )    : Executable( arg_executable )	{	const char* argv[2];	argv[0] = arg_executable;	argv[1] = 0;	MakeExecutable( argv );	}LocalExec::~LocalExec()	{	if ( Active() )		kill( pid, SIGTERM );	}void LocalExec::MakeExecutable( const char** argv )	{	pid = 0;	exec_error = 1;	has_exited = 0;	if ( access( executable, X_OK ) < 0 )		return;	pid = int( vfork() );	if ( pid == 0 )		{ // child		extern char** environ;#ifndef POSIX		execve( executable, (char **)argv, environ );#else		execve( executable, (char *const*)argv, environ );#endif		cerr << "LocalExec::MakeExecutable: couldn't exec ";		perror( executable );		_exit( -1 );		}	if ( pid > 0 )		exec_error = 0;	}int LocalExec::Active()	{	if ( has_exited || exec_error )		return 0;	int status;	int child_id = wait_for_pid( pid, &status, WNOHANG );	if ( child_id == 0 )		return 1;	if ( child_id == pid )		{		if ( (status & 0xff) != 0 )			cerr << "LocalExec::Active: strange child status for "			     << executable << "\n";		}	else if ( errno != ECHILD )		{		cerr << "LocalExec::Active: problem getting child status for ";		perror( executable );		}	has_exited = 1;	return 0;	}void LocalExec::Ping()	{	if ( kill( pid, SIGIO ) < 0 )		{		cerr << "LocalExec::Ping: problem pinging executable ";		perror( executable );		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -