[shell]system和execlp简单示例

shell脚本:hello.sh

#!/bin/bash
echo "i am in shell script"
echo "param 1 is $1"
echo "param 2 is $2"
variable=$[ $1 + $2 ]
echo "sum is $variable"

system接口:system.c

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

void main(void)
{
    printf("i am in c code!\r\n"
    system("/bin/bash ./hello.sh 10 20);  
}

输出

i am in c code!
i am in shell script!
param 1 is 10
param 2 is 20
sum is 30

 execlp接口:execlp.c

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

void main(void)
{
    int ret = 0;
    int param1 = 10;
    int param2 = 20;

    printf("i am in c code!\r\n");
    if(fork() == 0)
    {
        printf("execlp...........\r\n");
        ret = execlp("/bin/bash", "bash", "hello.sh", &param1, &param2, NULL);
        if(ret < 0)
        {
             printf("execlp failed!\r\n");
             return;
         }
    }  
}

这其中execlp的参数不管怎么填都得不到正确运行的结果

使用system获取system本身的返回值和脚本的返回值

int system_func(const char *command)
{
    int status;
    int ret;
    
    status = system(command);
#ifdef DEBUG    
    printf("status is 0x%x\n", status);
#endif
    if(-1 == status)
    {
        printf("%s:system error\n", __FUNCTION__);
        return -1;
    }
    else
    {
        if(WIFEXITED(status))
        {
            if(0 == WEXITSTATUS(status))
            {
                ret = (status>>8)&0xFF;
                return ret;
            }
            else
            {
                printf("%s:run shell script fail, script exit code:%d\n", __FUNCTION__, WEXITSTATUS(status));
                return -1;
            }
        }
        else
        {
            printf("%s:system fail, exit status=%d\n", __FUNCTION__, WEXITSTATUS(status));
            return -1;
        }
    }
}

 

posted @ 2017-05-26 22:34  aaronGao  阅读(1638)  评论(0编辑  收藏  举报