gpt4 book ai didi

c - mac osx 终端中的信号 EOF

转载 作者:太空狗 更新时间:2023-10-29 16:20:52 27 4
gpt4 key购买 nike

我被 K&R 中的 1.5.2 问题难住了。我在谷歌上搜索了一段时间,发现我必须在输入字符后提供 EOF 输入。

long nc = 0;

while (getchar() != EOF)
++nc;
printf("%ld\n", nc);

return 0;

我尝试将 command-D 和 control-D 作为 EOF 输入,但没有任何效果。知道如何为 Mac OS X 提供 EOF 吗?

最佳答案

默认情况下,当在行首按下 Control-D 时,macOS(以前称为 OS X 和 Mac OS X)软件会识别 EOF。 (我相信其他版本的 Unix 也有类似的行为。)

具体来说,实际操作是,当按下 Control-D 时,终端输入缓冲区中的所有字节都使用终端发送到附加/前台进程。在一行的开头,缓冲区中没有字节,因此进程被告知可用字节为零,这充当 EOF 指示器。

此过程兼作在行尾之前向进程传递输入的方法:用户可以键入一些字符并按 Control-D,这些字符将被发送到进程立即,无需通常等待输入/返回被按下。执行此“立即发送所有缓冲字节”操作后,缓冲区中不会留下任何字节。因此,当 Control-D 被第二次按下时,它与一行的开头相同(没有字节被发送,并且进程被赋予零字节),并且它的作用就像一个 EOF

您可以通过在终端中使用命令“man 4 tty”来了解有关终端行为的更多信息。默认的行规程是 termios。您可以使用命令 man termios 了解有关 termios 行规程的更多信息。

关于c - mac osx 终端中的信号 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com