来自终端C程序的文件输入

时间:2016-04-11 01:52:19

标签: c bash cmd

我正在开始一个C项目,我的教授希望我们使用以下格式来运行我们的程序:

./prog stop_words_dir < chapter.txt

我的理解是,这意味着我正在执行一个名为prog的程序,该程序将目录作为其参数(在本例中为stop_words_dir)并使用该目录中名为{{1}的特定文件}}

  1. 我说错了吗?
  2. 如果是这样,这种格式是Unix(更具体地说是bash)具体吗?
  3. Windows中的等效命令是什么样的?
  4. 使用chapter.txt而不是第二个参数
  5. 有什么好处
  6. 如何使用给定格式访问C程序中的<? (我知道如何使用两个参数执行此操作)

1 个答案:

答案 0 :(得分:6)

  
      
  1. 我说错了吗?
  2.   

不完全。 shell(任何类似Unix的shell - Bash当然,还有Bourne,Korn和其他shell,甚至包括C shell系列)从当前目录运行名为prog的程序,字符串为stop_words_dir作为参数,并使用标准输入读取当前目录中名为chapter.txt的文件。

  
      
  1. 如果是这样,这种格式是Unix(更具体地说是Bash)具体吗?
  2.   

使这个特定于Unix的唯一因素是使用/。在Windows上,使用本机shell,/会导致混淆(当然对于cmd.exe'shell')。

  
      
  1. Windows中的等效命令是什么样的?
  2.   
    prog stop_words_dir < chapter.txt
  
      
  1. 使用'&lt;'有什么好处?而不是第二个参数。
  2.   

主要是shell打开文件并处理错误(如果它不存在)。如果未使用<,您的程序将不得不进行打开,并处理错误。其次,您只能使用scanf()getchar()来读取标准输入,而不需要使用fscanf()getc()(或亲属)来读取数据。这只是一个小小的好处。通常,您编写程序以便处理任何给定的文件流,并在程序需要从标准输入读取时简单地传递stdin。然后,该功能更加通用 - 并且可以重复使用。

  
      
  1. 我如何在C程序中访问chapter.txt(使用给定格式。我知道如何使用两个参数执行此操作)?
  2.   

使用标准I / O函数从标准输入读取,例如scanf()getchar(),或使用常规I / O函数,但指定stdin作为文件流(例如为fgets()fread() - 或fscanf()getc(),或......)。