2011-11-03 67 views
4

我是一名物理學家,通常我只想完成計算,這就是我真正需要的。不過,我一直在使用關於缺乏「int main(int argc,char * argv [])」知識

int main(int argc, char* argv[]) 

,並一直是其非常討好的二進制文件在我沒想到即初始化變量

~$ ./program.exe a b c (a, b and c are numbers in this case, not letters ok?) 

所以,問題是

水平如何變得靈活*如何我用這種方式(或其他)「解析」或「管道」從一個到另一個沒有使用文件?*

例如:假設「a.exe」提供了一組「X-Y」點(如在電子表格中),以及我在「b.exe」上插入了哪些點。或者說,我使用bash/awk腳本來格式化「a.exe」的輸出格式,將其繪製在gnuplot上。

-----------------------------------------

再次嗨。我正在嘗試這樣做,但是,我仍然遇到問題。

要看到我在做什麼錯了,我寫了簡單的程序

#include <cstdio> 
    #include <iostream> 
    #include <cmath> 

    using namespace std; 

    int main(int argc, char* argv[]){ 

    for (int i = 0; i <= argc; i++) 
    cout << "argv[" << i << "]= " << argv[i] << endl; 


    getchar(); 
    return 0; 
    } 

;並與內容的文件(可以說是「TEST.DAT」)

1 
2 
3 
4 
5 
6 

自我不想在我的程序上閱讀文件的內容,我只是想「扔掉」它,所以我試過

more test.dat | ./program.exe 

甚至

./program.exe << EOF 
1 2 3 4 5 
EOF 

,但它不工作,我認爲它應該。

再次感謝。

+9

這個問題應該在stackoverflow上。 – greatwolf

+1

您可以使用xargs命令將文件內容更改爲命令行參數。 'cat test.dat | xargs preogram.exe' –

回答

10

您正在混合參數和管道的兩個概念。

您在main函數中指定的參數處理參數,而不是管道。

「管道」字符|用於管道,並且不影響參數,它會影響輸入和輸出流。 <>可以用於從一個文件進行管道傳輸。

你的程序調用後追加什麼是參數,例如:

progam.exe arg1 arg2 arg3 

這些將在節目中bolerplate代碼進行解析,並argv數組中結束時,main函數被調用。

當您使用<字符管道的文件到一個程序,該文件的內容將被髮送到該程序的輸入流:

program.exe < data.txt 

該計劃將不會有控制檯輸入(屏幕和鍵盤),而是從文件中提供數據。

當您使用>字符傳輸到文件時,程序的輸出將轉到文件而不是控制檯。例如:

program.exe > result.txt 

當使用|字符管從一個程序到另一個時,第一個節目的輸出流是其它程序的輸入流。例如:

program.exe | sort.exe 

第一個程序寫入輸出流的所有內容都會進入另一個程序的輸入流。如果您沒有指定任何輸入或輸出文件,則第一個程序具有控制檯輸入,第二個程序具有控制檯輸出。因此,數據流經這樣的兩個程序:

[console] --> [program.exe] --> [sort.exe] --> [console] 

您可以管幾個程序,以便數據從第一個程序流到最後。例如:

program.exe | sort.exe | more.exe 

然後,數據流throught所有三個程序:

[console] --> [program.exe] --> [sort.exe] --> [more.exe] --> [console] 

(通常不需要該.exe擴展時指定一個程序,我只包括在這裏,以程序之間清楚地區分,自變量和文件)。

+1

好的答案 - 值得添加,爲了好處,從輸入流獲取輸入可以使用'scanf'完成,並且將輸出發送到輸出流的方式是使用'printf' –

+0

,認識到這些操作符(<, >和|)都是在典型環境中由shell實現的,實際的程序二進制文件不需要做任何事情,實際上通常不知道正在使用的操作符,這一點很重要。它們不出現在'argv []'中。 – unwind

+0

這幫了很多Guffa。現在我知道它代表什麼。儘管如此,我只是嘗試了另一件事情,但仍然沒有得到我需要的東西。我只是編輯帖子。我不想讀,我想「扔」東西的程序。 – stringparser