原创 SylixOS下进程创建函数使用

2015-7-18 09:11 1198 22 22 分类: 软件与OS 文集: SylixOS应用开发

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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
22
关闭 站长推荐上一条 /3 下一条