在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[]) { int istatus; int stat = 0; int i = 0; pid_t pid = 0; pid_t sunpid = 0; char *args[3] = {"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; } |
文章评论(0条评论)
登录后参与讨论