繁体   English   中英

如何在C中使用UNIX终端输入重定向?

[英]How to use UNIX terminal input redirection in C?

我有这个C程序,它从用户那里获取输入并将其发送给方法:

#include <stdio.h>
#include <string.h>
#include "constants.h"
#include "lines.h"
#include "compare.h"

//gets arguments and sends to compare.c
int main() {
   int op = 1;
   char filename[20];

   scanf("%d ", &op);
   gets(filename);
   if ((char) op + '0' < 49 || (char) op + '0' > 57) {
       printf("Error: Invalid input");
       exit(0);
   }
   readstdin(filename, op);
   return 0;
}

但是我不想执行程序并从stdin读取,而是希望它从unix终端读取,以便:

./sort [field] < input_file

将读入文件。 (如果没有输入,[field]是选项,默认为1)。

例如,在UNIX中执行C程序的命令如下所示:

./sort 1 < test.txt

我该怎么做呢?

非常感谢任何帮助!

首先,您会在代码中以错误的方式获取参数。 如果要运行./sort <option> <filename> ,则不要使用stdin来检索这些参数。

使用以下函数签名将C程序中的参数传递给main:

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

argc是传递给程序的命令行参数的数量,而argv是这些参数的字符串数组。

./sort 5 test.in运行:

  • argc等于3
  • argv[0]将为"./sort"
  • argv[1]将为"5"
  • argv[2]将为"test.in"

您应该检查argc的值是否为3,以确保已传递2个参数( "5""test.in" )以及文件名( "./sort" ),总共"./sort"了3个。


如果要具有可选字段,最好将其放在必填字段之后,或者最好使用getopt之类的地方,而应改为: ./sort --file test.in./sort --opt 5 --file test.in 在这种情况下可能没有必要,但这是一个选择。


您可以使用atoistrtol解析整数选项,但是可以根据需要将其从字符串( char* )转换为整数类型,然后将fopenfgetsfclose转换为从输入文件中读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM