[英]File input from terminal C program
我正在开始一个C项目,我的教授希望我们使用以下格式来运行我们的程序:
./prog stop_words_dir < chapter.txt
这是我的理解是,这意味着我在执行程序名为prog
接受一个目录作为其参数(在这种情况下stop_words_dir
),并使用从命名的目录中的特定文件chapter.txt
。
<
而不是第二个参数有什么好处 chapter.txt
? (我知道如何使用两个参数来执行此操作)
- 我对么?
不是完全。 外壳程序(任何类似于Unix的外壳程序-当然是Bash,而且还有Bourne,Korn和其他外壳程序,甚至包括C外壳程序系列)都从当前目录运行名为prog
的程序,并使用字符串stop_words_dir
作为参数,并使用其标准输入当前目录中名为chapter.txt
的文件中的读数。
- 如果是这样,这种格式是否在Unix(更具体地说是Bash)上特定?
使该特定于Unix的唯一事情是使用/
。 在Windows上,使用本机外壳程序时, /
会引起混淆(对于cmd.exe
“外壳程序”肯定是这样)。
- Windows中的等效命令是什么样的?
prog stop_words_dir < chapter.txt
- 与第二个参数相比,使用'<'有什么好处。
首先,shell打开文件并处理错误(如果不存在)。 如果不使用<
,则您的程序将必须打开并处理错误。 其次,您可以仅使用scanf()
和getchar()
从标准输入中进行读取,而无需使用fscanf()
或getc()
(或亲戚)来读取数据。 这只是次要的好处。 通常,您编写程序以使其处理任何给定的文件流,并在程序需要从标准输入读取时简单地传递stdin
。 这样,该功能将变得更通用-并且可以重用。
- 我将如何在C程序(具有给定格式)中访问
chapter.txt
。我知道如何使用两个参数来执行此操作?
使用从标准输入读取的标准I / O函数scanf()
例如scanf()
或getchar()
,或使用常规I / O函数但将stdin
指定为文件流(例如fgets()
或fread()
或fscanf()
或getc()
或…)。
我对么?
不,但是你很近。
据我了解,这意味着我正在执行一个名为
prog
,该程序将目录作为其参数(在本例中为stop_words_dir
),并使用该目录中一个名为stop_words_dir
的特定文件chapter.txt
您正在执行一个名为prog
,该程序接受任意数量的传入参数,在本例中为1( stop_words_dir
),并将标准输入重定向到当前目录( ./
)中的stop_words_dir
的内容chapter.txt
它可能在也可能不在stop_words_dir
目录中。
请注意,必须在程序中使用argv
的第二个索引argv[1]
处理参数stop_words_dir
。
如果是这样,这种格式是Unix(更具体地说是bash)是否特定?
我相当确定这是特定于Unix的,但我并不肯定。
Windows中的等效命令是什么样的?
Google搜索应为您提供基本的Windows cmd
命令,以执行带有一个参数和重定向的标准输入的程序。
使用“ <”而不是第二个参数有什么好处
<
基本上是指在给定输入流内容的情况下切换键盘输入,或重定向标准输入。 第二个命令参数必须以不同的方式处理,例如打开和读取文件。
我将如何在C程序(具有给定格式)中访问Chapter.txt。我知道如何使用两个参数来执行此操作?
使用C
方法读取chapter.txt
的内容,以检索用户的键盘输入,例如scanf
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.