• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ do_exec函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中do_exec函数的典型用法代码示例。如果您正苦于以下问题:C++ do_exec函数的具体用法?C++ do_exec怎么用?C++ do_exec使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了do_exec函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: swapsystem

static int swapsystem(char *cmd)
{
	char	*prog, *args;
	int	retcode;

	for (; elvspace(*cmd); cmd++)
	{
	}
	prog = safedup(cmd);
	for (args = prog; *args && !elvspace(*args); args++)
	{
	}
	if (*args)
		*args++ = '\0';
	retcode = do_exec(prog, args, USE_ALL|HIDE_FILE, 0xFFFF, NULL);
	if (retcode == RC_NOFILE)
	{
		safefree(prog);
		prog = safealloc(strlen(cmd) + 4, sizeof(char));
		strcpy(prog, "/c ");
		strcat(prog, cmd);
		retcode = do_exec(tochar8(o_shell), prog,
					USE_ALL|HIDE_FILE, 0xFFFF, NULL);
	}
	safefree(prog);
	return retcode;
}
开发者ID:kirkendall,项目名称:elvis,代码行数:27,代码来源:osprg.c


示例2: execvpe

int
execvpe(const char* file, char* const argv[], char* const environment[])
{
	// let do_exec() handle cases where file is a path (or invalid)
	if (file == NULL || strchr(file, '/') != NULL)
		return do_exec(file, argv, environment, true);

	// file is just a leaf name, so we have to look it up in the path

	// get the PATH
	const char* paths = getenv("PATH");
	if (paths == NULL) {
		__set_errno(B_ENTRY_NOT_FOUND);
		return -1;
	}

	int fileNameLen = strlen(file);

	// iterate through the paths
	const char* pathEnd = paths - 1;
	while (pathEnd != NULL) {
		paths = pathEnd + 1;
		pathEnd = strchr(paths, ':');
		int pathLen = (pathEnd ? pathEnd - paths : strlen(paths));

		// We skip empty paths and those that would become too long.
		// The latter is not really correct, but practically irrelevant.
		if (pathLen == 0
			|| pathLen + 1 + fileNameLen >= B_PATH_NAME_LENGTH) {
			continue;
		}

		// concatinate the program path
		char path[B_PATH_NAME_LENGTH];
		memcpy(path, paths, pathLen);
		path[pathLen] = '\0';

		if (path[pathLen - 1] != '/')
			strcat(path, "/");
		strcat(path, file);

		// check whether it is a file
		struct stat st;
		if (stat(path, &st) != 0 || !S_ISREG(st.st_mode))
			continue;

		// if executable, execute it
		if (access(path, X_OK) == 0)
			return do_exec(path, argv, environment, true);
	}

	__set_errno(B_ENTRY_NOT_FOUND);
	return -1;
}
开发者ID:looncraz,项目名称:haiku,代码行数:54,代码来源:exec.cpp


示例3: program_thread

void program_thread(void *data) {
  exec_args_t exec_args;
  switch ((int)data) {
  case 1:
    exec_args.prog_name = "prog";
    exec_args.argv = (char *[]){"argument1", "ARGUMENT2", "a-r-g-u-m-e-n-t-3"};
    exec_args.argc = 3;
    do_exec(&exec_args);
  case 2:
    exec_args.prog_name = "prog";
    exec_args.argv = (char *[]){"String passed as argument."};
    exec_args.argc = 1;
    do_exec(&exec_args);
  case 3:
    exec_args.prog_name = "prog";
    exec_args.argv = (char *[]){"abort_test"};
    exec_args.argc = 1;
    do_exec(&exec_args);
  }
}

int main() {
  /* This is a simple demonstration of the exec functionality. It
   * requests to substitute current thread's image with program
   * called "prog", which is implemented in ./user/prog.c, and after
   * compilation embedded in the kernel image.

   * As the loaded program has no means to communicate with the
   * system, because system calls are not yet implemented, it runs
   * quietly. To test its behavior with a debugger, after starting
   * gdb issue the command:
   *    add-symbol-file user/prog.uelf 0x00400000
   * which will load the symbols for the user program. You may then
   * e.g. break at its main(), and see that argc and argv are set
   * correctly. If you let it run further, you may `print textarea`
   * to see that it accesses a string in .data and copies it to
   * .bss.
   */

  thread_t *td1 = thread_create("user_thread1", program_thread, (void *)1);
  thread_t *td2 = thread_create("user_thread2", program_thread, (void *)2);
  thread_t *td3 = thread_create("user_thread3", program_thread, (void *)3);

  sched_add(td1);
  sched_add(td2);
  sched_add(td3);

  sched_run();

  return 0;
}
开发者ID:rafalcieslak,项目名称:wifire-os,代码行数:51,代码来源:exec.c


示例4: sys_task

/*===========================================================================*
 *				sys_task				     *
 *===========================================================================*/
PUBLIC void sys_task()
{
/* Main entry point of sys_task.  Get the message and dispatch on type. */

  register int r;

  while (TRUE) {
	receive(ANY, &m);

	switch (m.m_type) {	/* which system call */
	    case SYS_FORK:	r = do_fork(&m);	break;
	    case SYS_NEWMAP:	r = do_newmap(&m);	break;
	    case SYS_EXEC:	r = do_exec(&m);	break;
	    case SYS_XIT:	r = do_xit(&m);		break;
	    case SYS_GETSP:	r = do_getsp(&m);	break;
	    case SYS_TIMES:	r = do_times(&m);	break;
	    case SYS_ABORT:	r = do_abort(&m);	break;
#if (CHIP == M68000)
	    case SYS_FRESH:	r = do_fresh(&m);	break;
#endif
	    case SYS_SIG:	r = do_sig(&m);		break;
	    case SYS_KILL:	r = do_kill(&m);	break;
	    case SYS_COPY:	r = do_copy(&m);	break;
	    case SYS_GBOOT:	r = do_gboot(&m);	break;
	    case SYS_UMAP:	r = do_umap(&m);	break;
	    case SYS_MEM:	r = do_mem(&m);		break;
	    case SYS_TRACE:	r = do_trace(&m);	break;
	    default:		r = E_BAD_FCN;
	}

	m.m_type = r;		/* 'r' reports status of call */
	send(m.m_source, &m);	/* send reply to caller */
  }
}
开发者ID:EmmanuelKasper,项目名称:minix-st-1.5,代码行数:37,代码来源:system.c


示例5: wm_exec

void wm_exec(const char *cmd)
{
	int pid;
	char *tmp;
	int tmp_len;

	pid=fork();
	
	if(pid<0)
		warn_err();
	
	if(pid!=0)
		return;
	
	setup_environ(SCREEN->xscr);
	
	close(wglobal.conn);
	
	tmp_len = strlen(cmd)+8;
	tmp=ALLOC_N(char, tmp_len);
	
	if(tmp==NULL)
		die_err();
	
	snprintf(tmp, tmp_len, "exec %s", cmd);
	
	do_exec(tmp);
}
开发者ID:Cougar,项目名称:pwm,代码行数:28,代码来源:exec.c


示例6: do_fork_exec

void do_fork_exec(char *cmdline, int *pid, int *stdin_fd, int *stdout_fd,
		  int *stderr_fd)
{
	int inpipe[2], outpipe[2], errpipe[2];

	if (pipe(inpipe) || pipe(outpipe) || (stderr_fd && pipe(errpipe))) {
		perror("pipe");
		exit(1);
	}
	switch (*pid = fork()) {
	case -1:
		perror("fork");
		exit(-1);
	case 0:
		if (stderr_fd) {
			fix_fds(inpipe[0], outpipe[1], errpipe[1]);
		} else
			fix_fds(inpipe[0], outpipe[1], 2);

		do_exec(cmdline);
		exit(-1);
	default:;
	}
	close(inpipe[0]);
	close(outpipe[1]);
	*stdin_fd = inpipe[1];
	*stdout_fd = outpipe[0];
	if (stderr_fd) {
		close(errpipe[1]);
		*stderr_fd = errpipe[0];
	}
}
开发者ID:AndrewX192,项目名称:qubes-core,代码行数:32,代码来源:exec.c


示例7: sys_task

/*===========================================================================*
 *				sys_task				     *
 *===========================================================================*/
PUBLIC sys_task()
{
/* Main entry point of sys_task.  Get the message and dispatch on type. */

  register int r;

  while (TRUE) {
	receive(ANY, &m);

	switch (m.m_type) {	/* which system call */
	    case SYS_FORK:	r = do_fork(&m);	break;
	    case SYS_NEWMAP:	r = do_newmap(&m);	break;
	    case SYS_EXEC:	r = do_exec(&m);	break;
	    case SYS_XIT:	r = do_xit(&m);		break;
	    case SYS_GETSP:	r = do_getsp(&m);	break;
	    case SYS_TIMES:	r = do_times(&m);	break;
	    case SYS_ABORT:	r = do_abort(&m);	break;
	    case SYS_SIG:	r = do_sig(&m);		break;
	    case SYS_COPY:	r = do_copy(&m);	break;
	    default:		r = E_BAD_FCN;
	}

	m.m_type = r;		/* 'r' reports status of call */
	send(m.m_source, &m);	/* send reply to caller */
  }
}
开发者ID:alejandromagnorsky,项目名称:so2010,代码行数:29,代码来源:system.c


示例8: init_user

void init_user() {
    //test_file();
    do_exec("/home/init", NULL);
    while(1) {
        ;
    }
}
开发者ID:MTN-Software,项目名称:Panda,代码行数:7,代码来源:main.c


示例9: evaluate_command

static ERL_NIF_TERM
evaluate_command(esqlite_command *cmd, esqlite_connection *conn)
{
    switch(cmd->type) {
    case cmd_open:
	    return do_open(cmd->env, conn, cmd->arg);
    case cmd_exec:
	    return do_exec(cmd->env, conn, cmd->arg);
    case cmd_changes:
	    return do_changes(cmd->env, conn, cmd->arg);
    case cmd_prepare:
	    return do_prepare(cmd->env, conn, cmd->arg);
    case cmd_step:
	    return do_step(cmd->env, conn->db, cmd->stmt);
    case cmd_reset:
	    return do_reset(cmd->env, conn->db, cmd->stmt);
    case cmd_bind:
	    return do_bind(cmd->env, conn->db, cmd->stmt, cmd->arg);
    case cmd_column_names:
	    return do_column_names(cmd->env, cmd->stmt);
    case cmd_close:
	    return do_close(cmd->env, conn, cmd->arg);
	case cmd_insert:
	    return do_insert(cmd->env, conn, cmd->arg);
    default:
	    return make_error_tuple(cmd->env, "invalid_command");
    }
}
开发者ID:MSch,项目名称:esqlite,代码行数:28,代码来源:esqlite3_nif.c


示例10: process_rq

process_rq( char *rq, int fd )
{
	char	cmd[BUFSIZ], arg[BUFSIZ];
	int 	whatiscmd = 0;

	/* create a new process and return if not the child */
	if ( fork() != 0 )
		return;

	strcpy(arg, "./");		/* precede args with ./ */
	if ( sscanf(rq, "%s%s", cmd, arg+2) != 2 )
		return;

	if ( strcmp(cmd,"GET") == 0 )
		whatiscmd=0;
	else if (strcmp(cmd,"HEAD") == 0 )
		whatiscmd=1;
	else
		printf("That command is not yet implemented\n");


	switch (whatiscmd){

		case 0:
			do_exec( arg, fd );
			break;
		case 1:

			do_exec1( arg, fd );
			break;
		default:
			printf("That command is not yet implemented\n");
}

}
开发者ID:SS-2014536015,项目名称:SystemProgramming,代码行数:35,代码来源:2014536015_PE9.c


示例11: do_proc_op

int do_proc_op(void *t, int proc_id)
{
	struct task_struct *task;
	struct thread_struct *thread;
	int op, pid;

	task = t;
	thread = &task->thread;
	op = thread->request.op;
	switch(op){
	case OP_NONE:
	case OP_TRACE_ON:
		break;
	case OP_EXEC:
		pid = thread->request.u.exec.pid;
		do_exec(thread->mode.tt.extern_pid, pid);
		thread->mode.tt.extern_pid = pid;
		cpu_tasks[task_thread_info(task)->cpu].pid = pid;
		break;
	case OP_FORK:
		attach_process(thread->request.u.fork.pid);
		break;
	case OP_CB:
		(*thread->request.u.cb.proc)(thread->request.u.cb.arg);
		break;
	case OP_REBOOT:
	case OP_HALT:
		break;
	default:
		tracer_panic("Bad op in do_proc_op");
		break;
	}
	thread->request.op = OP_NONE;
	return(op);
}
开发者ID:420GrayFox,项目名称:dsl-n55u-bender,代码行数:35,代码来源:process_kern.c


示例12: do_log

int do_log(int nargs, char **args)
{
    char* par[nargs+3];
    char* value;
    int i;

    par[0] = "exec";
    par[1] = "/system/bin/log";
    par[2] = "-tinit";
    for (i = 1; i < nargs; ++i) {
        value = args[i];
        if (value[0] == '$') {
            /* system property if value starts with '$' */
            value++;
            if (value[0] != '$') {
                value = (char*) property_get(value);
                if (!value) value = args[i];
            }
        }
        par[i+2] = value;
    }
    par[nargs+2] = NULL;

    return do_exec(nargs+2, par);
}
开发者ID:CORE-ANDROID,项目名称:system_core,代码行数:25,代码来源:builtins.c


示例13: exec

struct expr    *
exec(struct expr * e, struct context * ctx)
{
	struct expr    *a, *re;
	struct args     args;
	struct list    *l;

	if (!e || list_len(e) < 2) {
		free_expr(e);
		return empty_list();
	}
	memset(&args, 0, sizeof(args));
	for (l = e->v.list->next; l != NULL; l = l->next) {
		a = eval(l->v, ctx);
		build_argv(a, &args);
		full_free_expr(a);
	}

	re = do_exec(&args);

	free_expr(e);
	free_args(&args);

	return re;
}
开发者ID:S010,项目名称:misc,代码行数:25,代码来源:eval.c


示例14: kcinth

/****************** syscall handler in C ***************************/
int kcinth()
{
    u16    segment, offset;
    int    a,b,c,d, r;
    segment = running->uss; 
    offset = running->usp;

    /** get syscall parameters from ustack **/
    a = get_word(segment, offset + 2*PA);
    b = get_word(segment, offset + 2*PB);
    c = get_word(segment, offset + 2*PC);
    d = get_word(segment, offset + 2*PD);

    // UNCOMMENT TO SEE syscalls into kernel
    // printf("proc%d syscall a=%d b=%d c=%d d=%d\n", running->pid, a,b,c,d);

    switch(a){
        case 0 : r = running->pid;     break;
        case 1 : r = do_ps();          break;
        case 2 : r = chname(b);        break;
        case 3 : r = kmode();          break;
        case 4 : r = tswitch();        break;
        case 5 : r = do_wait(b);       break;
        case 6 : r = do_exit(b);       break;
        case 7 : r = do_fork();        break;
        case 8 : r = do_exec(b);       break;

        case 90: r =  getc();          break;
        case 91: r =  putc(b);         break;       
        case 99: do_exit(b);           break;
        default: printf("invalid syscall # : %d\n", a); 
    }
    put_word(r, segment, offset + 2*AX);
}
开发者ID:B-Rich,项目名称:CptS460,代码行数:35,代码来源:t.c


示例15: start_next_task

static void
start_next_task (System *system)
{
  unsigned task_index = system->n_finished_tasks + system->n_running_tasks;
  int stderr_pipe[2], stdout_pipe[2], stdin_pipe[2];
  int pid;
  Task *task = system->tasks->pdata[task_index];
  g_assert (task->state == TASK_WAITING);

  do_pipe (stdin_pipe);
  do_pipe (stdout_pipe);
  do_pipe (stderr_pipe);

retry_fork:
  pid = fork ();
  if (pid < 0)
    {
      if (errno == EINTR)
        goto retry_fork;
      else
        g_error ("error forking");
    }
  else if (pid == 0)
    {
      /* child process */
      dup2 (stdin_pipe[0], STDIN_FILENO);
      dup2 (stdout_pipe[1], STDOUT_FILENO);
      dup2 (stderr_pipe[1], STDERR_FILENO);
      do_exec (task->str);
      _exit (127);
    }

  /* parent process */
  close (stdin_pipe[0]);
  close (stdout_pipe[1]);
  close (stderr_pipe[1]);
  task->state = TASK_RUNNING;
  system->n_unstarted_tasks--;
  system->n_running_tasks++;
  task->info.running.pid = pid;
  task->info.running.stdin_fd = stdin_pipe[1];
  task->info.running.stdin_source = NULL;
  task->info.running.stdout_fd = stdout_pipe[0];
  task->info.running.stdout_source = NULL;
  task->info.running.stderr_fd = stderr_pipe[0];
  task->info.running.stderr_source = NULL;
  task->info.running.stdin_output_buffer = g_byte_array_new ();
  task->info.running.stdout_input_buffer = g_byte_array_new ();
  task->info.running.stderr_input_buffer = g_byte_array_new ();
  task->info.running.stdout_source = g_source_fd_new (task->info.running.stdout_fd, G_IO_IN, handle_stdout_readable, task);
  task->info.running.stderr_source = g_source_fd_new (task->info.running.stderr_fd, G_IO_IN, handle_stderr_readable, task);
  g_child_watch_add (pid, handle_child_watch_terminated, task);
  GTimeVal cur_time;
  g_get_current_time (&cur_time);
  SystemTrap *trap;
  for (trap = task->system->trap_list; trap; trap = trap->next)
    if (trap->funcs->handle_started)
      trap->funcs->handle_started (task, &cur_time, task->str, trap->trap_data);
}
开发者ID:davebenson,项目名称:gtk-parallelizer,代码行数:59,代码来源:parallelizer.c


示例16: msg_exec

/*
 * Return value is kept in the same buf.
 */
void msg_exec(message_t msg)
{
	/*
	 * Return value is kept in the same buf.
	 */
	msg->w1 = do_exec(msg->tid, (char *)msg->snd_ptr, (struct vn_object *)msg->rcv_ptr);
	reply_message(msg->tid, msg);
}
开发者ID:bishisht,项目名称:manrix,代码行数:11,代码来源:msg.c


示例17: ATF_TC_BODY

ATF_TC_BODY (exec_success, tc)
{
    atf_process_status_t status;

    do_exec (tc, "exit-success", &status);
    ATF_CHECK (atf_process_status_exited (&status));
    ATF_CHECK_EQ (atf_process_status_exitstatus (&status), EXIT_SUCCESS);
    atf_process_status_fini (&status);
}
开发者ID:274914765,项目名称:C,代码行数:9,代码来源:process_test.c


示例18: start

void start(uint16_t arg)
{
        init_tarfs();
        tarfs_dir();

        do_exec("bin/shell");

        while(TRUE)     
	  Yield();
}
开发者ID:ChidambaramR,项目名称:SBUnix_X86_64,代码行数:10,代码来源:main.c


示例19: main

int main() {
  exec_args_t exec_args;
  exec_args.prog_name = "fd_test";
  exec_args.argv = (char *[]){"fd_test"};
  exec_args.argc = 1;

  do_exec(&exec_args);

  return 0;
}
开发者ID:rafalcieslak,项目名称:wifire-os,代码行数:10,代码来源:exec_fd_test.c


示例20: sys_execve

int sys_execve(char __user *filename,
	       char __user **argv,
	       char __user **envp)
{
	int ret = 0;
	pt_regs *regs = get_pt_regs();

	ret = do_exec(filename, argv, envp, regs);
	if (!ret)
		ret = regs->r0;

	return ret;
}
开发者ID:lemin9538,项目名称:mirros,代码行数:13,代码来源:syscall.c



注:本文中的do_exec函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ do_execve函数代码示例发布时间:2022-05-30
下一篇:
C++ do_error函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap