将Cat命令与C代码一起使用

时间:2018-07-24 11:55:51

标签: c linux cat

我在学校项目中使用cat命令。

我需要给我的代码输入一个txt文件,然后评估输出(保存在txt文件中)。 到目前为止,我在命令行中使用了它:

cat input_000.txt | ./main > my_output.txt

./ main是我的C代码。

input_000.txt的结构如下:

0 a a R 3
1 a b L 4
4 c b R 1
ecc...

我有一定数量的由5个字符组成的行(它们之间有空格)。

如何获取C代码中每一行的内容?有人告诉我,请使用标准输入,但我一直仅通过键盘输入使用scanf

在这种情况下仍然可以使用吗?

我应该如何保存输出?我通常使用fwrite,但是在这种情况下,一切由cat命令管理

3 个答案:

答案 0 :(得分:2)

这就是管道的工作方式,它进行设置,以便将管道左侧的输出写入右侧程序的标准输入。

简而言之,如果您可以读取stdin的输入(就像使用普通scanf一样),那么您根本就不需要做任何更改。

重定向的工作原理几乎相同。重定向到文件(>)将使对stdout的所有写操作都进入该文件。从文件(<重定向将使对stdin的所有读取均来自文件。

答案 1 :(得分:1)

您可以使用getline(或实际上是scanf来读取stdin(fd = 0)并将其保存在C代码中的char*中……那么您只需要写入stdout(fd = 1),而您的>将完成写入文件的工作

答案 2 :(得分:1)

您需要的是函数内部的类似内容...

FILE *input = fopen("input.txt","rw"); //rw (read-write)
FILE *output= fopen("output.txt","rw"); //rw (read-write)
char inputArray[500];
char outputArray[500];

while(fscanf(input,"%s", inputArray) != EOF){
      //read the line and save in 'inputArray'
      //you can also use %c to find each caracter, in your case I think it's better...you can //save each caracter in a array position, or something like that
}

while(number of lines you need or the number of lines from your input file){
      fprintf(output,"%s\n",output); //this will write the string saved in 'outputArray'
}

如果不想使用它...那么可以使用<并保存输出>

给main.c输入

./ main.o output.txt

(类似,它不安全,因为终端可以进行设置以使用其他类型的字符集...