2010-10-14 65 views
1

shell,如果我想跑與交流計劃的Linux shell命令,我會用我爲什麼能寫入VxWorks的命令與交流計劃

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); 
} 
+0

哪個版本的vxWorks? – indiv 2010-10-14 19:36:45

回答

2

如果這是一個目標/內核殼(即目標本身運行),那麼請記住,所有的shell命令被簡單地翻譯成函數調用。

因此, 「LS」 真的是LS(),我相信在dirLib.h

+0

這是真的。除非在編譯時不知道命令或表達式(可能是從腳本文件輸入的用戶),否則我可以想到將命令字符串注入shell的幾個原因。然而,shell能夠執行運行時C表達式評估,這可能是有用的(可能很少)。 – Clifford 2010-10-14 20:59:39

+0

這是非常有用的信息。 – Jason 2010-10-15 15:29:58

0

聲明與以往一樣,閱讀documentation通話。該示例中使用的大多數函數都需要ioLib.h,而printf()當然需要stdio.h。

至於你是否需要爲編譯任何代碼包含任何特定頭文件的一般問題,你確實需要聲明所有使用的符號,通常這意味着包含適當的頭文件。編譯器很快會告訴你任何未定義的符號,無論是通過警告還是錯誤(在C89/90中未定義的函數都不是錯誤,只是一個壞主意)。

+0

感謝您的反饋。我是一個完整的vxworks新手,這也許是爲什麼我無法找到api。 (我知道聽起來很可笑)無論如何,謝謝你的鏈接,這應該有很大的幫助。 – Jason 2010-10-15 15:29:37

+0

@Jason:我剛剛發現要找到Google的VxWorks文檔副本。取決於某些大學託管的可能是舊文檔的副本,您應該使用隨VxWorks開發工具和許可證提供的文檔。您也可以通過http://www.windriver.com/support/在線訪問官方文檔。 – Clifford 2010-10-15 21:50:20

1

我發現下面的代碼段爲我工作。出於某種原因,更改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); 
} 
相關問題