我在学习测试中使用read(2)时遇到了一些问题。POSIX读取(2),意外行为
的代码如下:
#include <stdio.h>
int main() {
size_t length;
read(0, &length, sizeof(length));
printf("input = %u\n", length);
return 0;
}
我想,这个代码将读取从标准输入输出8个字节(即ASCII字符),将它们存储在可变长度。然后它将打印出标准输出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()的返回值,那么来自同一输入的输出将有所不同?
N.B.我知道read(2)是一个原始系统调用,不应该读取来自终端的输入,这只是一个学习问题。
如何为'/ test'将数据输入程序?在程序中键入什么 - 输入数据是什么。 (还有一个'len = 4195338',这大概应该是'input = 4195338'。) –
@JonathanLeffler我只是从终端运行程序,然后按键盘输入。 – eang