如何使用c程序将命令写入vxworks shell

时间:2010-10-14 19:28:30

标签: c shell vxworks

如果我想在linux下使用c程序运行shell命令,我会使用

system("ls");

有没有办法可以在Wind River vxworks中实现这一目标?

我找到了以下示例,但我想知道我是否需要包含vxworks头文件才能使用?我假设我这样做,但我怎么弄清楚哪一个?

实施例

//  This function runs a shell command and captures the output to the
//  specified file
//

extern int consoleFd;
typedef unsigned int             (*UINTFUNCPTR) ();

extern "C" int shellToFile(char * shellCmd, char * outputFile)
{
int rtn;
int STDFd;
int outFileFd;

   outFileFd = creat( outputFile, O_RDWR);

   printf("creat returned %x as a file desc\n",outFileFd);

   if (outFileFd != -1)  
   {  
    STDFd=ioGlobalStdGet(STD_OUT);  
      ioGlobalStdSet(STD_OUT,outFileFd);  
      rtn=execute(shellCmd);  
   if (rtn !=0)  
    printf("execute returned %d \n",outFileFd);  
      ioGlobalStdSet(STD_OUT,STDFd);  

   }  
   close(outFileFd);  
   return (rtn);  
}  

4 个答案:

答案 0 :(得分:2)

如果这是一个目标/内核shell(即在目标本身上运行),那么请记住所有shell命令都只是转换为函数调用。

因此“ls”实际上是对ls()的调用,我相信它是在dirLib.h中声明的

答案 1 :(得分:2)

我发现下面的代码段对我有效。由于某种原因,更改globalStdOut不起作用。执行功能对我来说也不起作用。但是我将特定任务设置到我的文件中,我能够获得所需的数据。

/* This function directs the output from the devs command into a new file*/

int devsToFile(const char * outputFile)  
{  
    int stdTaskFd;  
    int outputFileFd;

    outputFileFd = creat( outputFile, O_RDWR);

    if (outputFileFd != ERROR)
    {
        stdTaskFd = ioTaskStdGet(0,1);
        ioTaskStdSet(0,1,outputFileFd);
        devs();
        ioTaskStdSet(0,1,stdTaskFd);
        close(outputFileFd);
        return (OK);
    }
    else
        return (ERROR);
}

答案 2 :(得分:0)

我认为ExecCmd功能正是您所需要的。

http://www.dholloway.com/vxworks/6.5/man/cat2/ExecCmd.shtml

答案 3 :(得分:0)

与以往一样,请阅读documentation。对于该示例中使用的大多数函数都需要ioLib.h,而对于printf()当然是stdio.h。

关于是否需要为任何编译包含任何特定标头的一般问题,您需要声明所有使用的符号,通常这意味着包括适当的标头。编译器很快会通过警告或错误告诉你任何未定义的符号(在C89 / 90中未定义的函数不是错误,只是一个坏主意)。