tag 标签: posix_spawn()

相关博文
  • 热度 22
    2015-7-18 09:11
    1188 次阅读|
    0 个评论
    在 Linux/Uinx 编程中,对进程的创建经常使用 fork 函数,但 SylixOS 中并不支持 fork 函数,因而传统的 fork()+exec() 创建进程的模式不再适用。虽然嵌入式应用中多线程的使用远远多于多进程的使用,但如果不能够实现进程创建显然会感觉缺点什么。 考虑到 SylixOS 声称支持 POSIX1003.1b 标准,除了 fork 函数外,还有 posix_spawn 函数可以选择。此函数及相关函数的介绍在网络中不多见,无意间看到 QNX 操作系统的文档 http://www.qnx.com/developers/docs/660/index.jsp?topic=%2Fcom.qnx.doc.neutrino.lib_ref%2Ftopic%2Fp%2Fposix_spawn.html 中有详细说明(这里非常感谢 QNX 能够毫无保留的开放帮助文档)。这个文档里面几乎介绍了所有常用的 POSIX 函数,而且条理清晰。 弄明白相关函数功能和参数后,使用就相对简单了,代码如下: #include spawn.h #include stdio.h #include errno.h #include unistd.h #include sys/types.h #include sys/wait.h extern char **environ; /************************************************************************ ** 函数名称: main ** 功能描述: 程序主函数 ************************************************************************/ int main(int argc, char * argv = {"hello","-l",NULL};     posix_spawnattr_t          attr;     posix_spawn_file_actions_t fact;     posix_spawnattr_init(attr);             /*  初始化spawn函数参数 */     posix_spawn_file_actions_init(fact);     istatus = posix_spawn(pid,"./helloworld",fact,attr,                                                     args,environ);        if(istatus != 0) {          printf("child process create faile");     }     printf("pid=%d,child pid = %d\n",getpid(),pid);/*  输出子父进程ID  */     sunpid = waitpid(pid,stat,0);                 /*  等待子进程结束  */     printf("%d stat is %d\n",sunpid,stat);、     exit(0);     return 0; }