2

LinuxでACプログラムを使用してシェルコマンドを実行したい場合は、

system("ls");

ウインドリバー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

4 に答える 4

3

以下のコード セグメントが機能することがわかりました。何らかの理由で、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);
}
于 2010-10-18T20:11:26.353 に答える
2

これがターゲット/カーネル シェル (つまり、ターゲット自体で実行中) である場合、すべてのシェル コマンドは単純に関数呼び出しに変換されることに注意してください。

したがって、「ls」は実際にはls()への呼び出しであり、dirLib.hで宣言されていると思います

于 2010-10-14T20:48:31.013 に答える
0

いつものように、ドキュメントを読んでください。その例で使用されているほとんどの関数には ioLib.h が必要であり、もちろん printf() には stdio.h が必要です。

コードをコンパイルするために特定のヘッダーを含める必要があるかどうかという一般的な質問に関しては、使用するすべてのシンボルを宣言する必要があります。これは一般に、適切なヘッダーを含めることを意味します。コンパイラは、警告またはエラーのいずれかによって、未定義のシンボルについてすぐに通知します (C89/90 では、未定義の関数はエラーではなく、単に悪い考えです)。

于 2010-10-14T20:55:06.470 に答える
0

ExecCmd機能はあなたが探しているものだと思います。

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

于 2010-10-14T20:01:37.677 に答える