c - 我无法理解 read 系统调用的作用
问题描述
我不知道读完 10 个字符后 read 做了什么。
源代码是这样的:
#include <unistd.h>
int
main(int argc, char *argv[]) {
char buf[10];
read(0, buf, 10);
}
我输入了 10 个字符,程序按预期运行,但是当我添加更多字符时,shell 将额外的字符作为命令运行!
解决方案
您无法理解代码的作用的原因是源代码很糟糕 - 它在可以/应该使用“幻数”零作为文件描述符时STDIN_FILENO
更容易查看它从中读取数据的内容。
它可能会做什么(如果读取没有返回错误)是char
从标准输入读取 10 (如果它连接到终端输入,可能会等待您按键);在可能的情况下(假设 UTF-8,其中代码点采用可变数量的字节)10char
可能只是(例如)3 个半字符/代码点。
当然,程序在读取后退出,当这种情况发生时(如果标准输入来自终端输入)终端输入将在程序退出后连接回终端,所以第 10 号之后的任何数据char
(可以以格式错误的“多字节代码点的最后一部分”)将转到终端。
推荐阅读
- windows - 从 DLL 获取导入表
- python - 反转字典中的键值(Python 中的高级反转字符串)
- javascript - 执行onload时如何更改变量
- laravel - 如何使用 Vue 在 Laravel 中上传文件 PDF
- pandas - 无法从 Groupby 保存到 CSV
- php - 如何在 Linux 命令行上通过 cURL 使用 PHP 将文件上传到不同的子目录?
- mysql - 如何将列中的多个值与其他列合并,该列也有多个用逗号分隔的值
- c++ - 使用 bazel 构建 TensorFlow C++ 调用模型时,.so 文件不起作用
- c# - Entity Framework Linq 中 where 子句内的空值检查
- mysql - 如何在月末显示数据