我在学习测试中使用 read(2) 时遇到了一些问题。
代码如下:
#include <stdio.h>
int main() {
size_t length;
read(0, &length, sizeof(length));
printf("input = %u\n", length);
return 0;
}
我想这段代码将从 stdio 读取 8 个字节(即 ascii char),并将它们存储在长度变量中。然后它将 8 个字节的相应 unsigned int 值打印到标准输出。
所以,让我的测试如下:从 linux 终端运行这个程序,然后点击“enter”。我希望长度的值只是 10(换行符的 ascii 值)。
但是运行这个测试(也有很多次):
$ ./test
len = 4195338
但是这个版本的代码就像我期望的那样工作:
#include <stdio.h>
int main() {
int a = 10;
size_t length;
int b = 123;
ssize_t n = read(0, &length, sizeof(length));
printf("input = %u\n", length);
return 0;
}
$ ./test
input = 10
那么,有什么意义呢?为什么如果我添加一些随机和未使用的变量,并且如果我存储 read() 的返回值,相同输入的输出会有所不同?
注意我知道 read(2) 是一个原始系统调用,不应该从终端读取输入,这只是一个学习问题。