热度 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; }