【问题标题】:How to get return value from shell script using c code [duplicate]如何使用c代码从shell脚本中获取返回值[重复]
【发布时间】:2017-07-18 23:35:26
【问题描述】:

我想使用 c 代码从我的脚本中获取返回值。 考虑到我的脚本在另一个分区中,我正在挂载该分区并且我正在调用,

value=system("./mnt1/myscript.img");

我需要 myscript.img 文件中的一个函数,它应该返回一个值(例如:mmcpart) 我如何构建脚本以获取返回值。谁能帮我解决这个问题。 提前致谢。

【问题讨论】:

    标签: c shell


    【解决方案1】:

    您可以将shell脚本的输出写入一个文件,并从C程序中读取文件内容。

    只有在 shell 脚本进程完成后,您的 C 程序才必须尝试读取文件,最好使用 $? = 0。

    你可以把你的shell脚本文件名放在.profile文件中,它会自动执行你的shell脚本。

    Shell 脚本编程拥有强大的文件处理命令,写入文件应该不是问题。

    不确定为什么要使用 **tee ** 命令。您是否也希望将输出发送到 STDOUT?

    【讨论】:

    • 谢谢...我认为这会有所帮助,我会尽力让我知道.....
    • 如何打开文件....我在启动时运行我的脚本...我尝试了以下操作,(1) cat > filename
    • 你可以把你的shell脚本文件名放在.profile文件中,它会自动执行你的shell脚本。
    【解决方案2】:

    您真正需要的是一个管道,然后是 fork 和 execvp,您可以在其中执行您的脚本。像这样的东西应该适合你

        int mypipe[2];
        if(pipe(mypipe) == -1) {
          perror("Pipe creation failed");
          exit(1);
        }
    
        if(fork() == 0)            //first fork
        {
            close(STDOUT_FILENO);  //closing stdout
            dup(mypipe[1]);         //replacing stdout with pipe write
            close(mypipe[0]);       //closing pipe read
            close(mypipe[1]);
    
            const char* myprog[] = { "ps", "-ef", 0};
            execvp(myprog[0], myprog);
            perror("error in execvp for ps command");
            exit(1);
        }
    
        char str[200];
        FILE* fp = fdopen(mypipe[0], "r");
    
        while (fgets(str, 200, fp) != 0) {
                printf("%s\n", str);
        }
    

    【讨论】:

    • 当调用 fork() 失败时,此答案无法解释。相反,它假定调用是成功的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多