从命令行提供 EOF 字符

Rah*_*hul 5 command-line

我正在从命令提示符读取字符,并检查 EOF 以终止程序。
但是,当我给命令Ctrl+D它没有采取一个EOF。请具体说明如何处理。

Ctrl+C正在工作,这会终止整个过程。

wur*_*tel 4

假设 tty“cooked”模式,ctrl-D通过终止行输入处理并将已输入的数据发送到应用程序来工作。因此,如果您键入“abc”,后跟ctrl-D这三个字节将被发送到应用程序。

现在,应用程序通常如何确定文件结尾?当读取返回 0 字节时,假定 EOF。所以你需要让读取返回 0 字节。如果您先点击enter,然后点击ctrl- D,则首先您键入的任何内容都会与换行符一起发送到应用程序。然后ctrl-D会使您输入的任何数据(即无数据!)发送到应用程序,该应用程序读取 0 字节,并假定 EOF。

enter如果您在点击之前输入任何内容ctrl-D那么应用程序会获取这些击键,并等待更多。因此,要在不先点击 的情况下生成 EOF enter,请连续点击ctrl-D两次。

所以回答你的问题:在点击ctrl-之前你是否首先输入了任何字符(除了换行符) D?如果是这样,请连续尝试两次。

这可以用例如:

$ wc -l
test123     0     1     7
Run Code Online (Sandbox Code Playgroud)

(在 后点击ctrl-两次。)Dtest123

该wc实用程序显示读取的行数、单词数和字符数。行数为 0,因为您没有输入换行符,并且行test123数为 1 个单词和 7 个字符长。