gpt4 book ai didi

c - 我无法理解 read 系统调用的作用

转载 作者:行者123 更新时间:2023-11-30 18:43:51 26 4
gpt4 key购买 nike

我不知道读了 10 个字符后会做什么。

源代码是这样的:

#include <unistd.h>

int
main(int argc, char *argv[]) {
char buf[10];

read(0, buf, 10);
}

我输入了 10 个字符,程序按我的预期运行,但是当我添加更多字符时,shell 将多余的字符作为命令运行!

enter image description here

最佳答案

你无法理解代码的作用的原因是源代码很糟糕 - 它使用“魔数(Magic Number)”零作为文件描述符,而它可以/应该使用 STDIN_FILENO 来更容易看到它从哪里读取数据。

它可能做的事情(如果读取不返回错误)是从标准输入读取 10 个字符(如果它连接到终端输入,可能会等待您按键);如果有可能(假设 UTF-8,其中代码点采用可变数量的字节),10 个 char 可能仅为(例如)3 个半字符/代码点。

当然,程序在读取后退出,当发生这种情况时(如果标准输入来自终端输入)终端输入将在程序退出后连接回终端,因此第 10 个 之后的任何数据char(可以以格式错误的“多字节代码点的最后一部分”开头)将转到终端。

关于c - 我无法理解 read 系统调用的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961006/

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