2011-11-03 65 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