C 如何使用 read 系统调用读取字节?
How does C read bytes using the read syscall?
我需要使用 read
系统调用读取 unsigned short
。
根据 the manpage:
read() attempts to read up to count
bytes from file descriptor fd
into the buffer starting at buf
.
在我的例子中,unsigned short
是两个字节大小,因此它最多可以存储 65535 个数字。但是当我执行此代码时:
char buf[2];
bytes_read = read(0, buf, 2);
bytes_wrote = write(1, buf, 2);
并在命令行中键入数字 123
,它 returns 仅 12
。它不是读取字节,而是读取符号吗?如何将包含 2 个以上符号的值读入 2 字节缓冲区?例如,unsigned short
的最大值。我在 K&R 或联机帮助页中均未找到相关信息,因此我认为它非常简单。
注意:我假设您的终端使用 ASCII 或 UTF8。就此解释而言,它们是等价的。
当您键入 123
时,read
不会将其作为数字。它把它看作一个字节序列——因为你说它应该寻找填充一个 2-char
缓冲区,它看到前两个字节:首先是 0x31,然后是 0x32。它读取第一个字节,然后读取第二个字节;它不会将它们解释为数字。当解码为 ASCII 或 UTF8 时,字节序列 碰巧 表示一个数字是无关紧要的; C 所关心的是实际的字节序列,这就是它给你的。
请注意,它甚至看不到 第三个字节。它留在输入流中,供以后的输入操作使用。
如果这就是您想要的,那就太好了!如果你想输入一个数字(即输入为字节字符串,其值与十进制数对齐),请查看 fscanf
及其相关函数。
我需要使用 read
系统调用读取 unsigned short
。
根据 the manpage:
read() attempts to read up to
count
bytes from file descriptorfd
into the buffer starting atbuf
.
在我的例子中,unsigned short
是两个字节大小,因此它最多可以存储 65535 个数字。但是当我执行此代码时:
char buf[2];
bytes_read = read(0, buf, 2);
bytes_wrote = write(1, buf, 2);
并在命令行中键入数字 123
,它 returns 仅 12
。它不是读取字节,而是读取符号吗?如何将包含 2 个以上符号的值读入 2 字节缓冲区?例如,unsigned short
的最大值。我在 K&R 或联机帮助页中均未找到相关信息,因此我认为它非常简单。
注意:我假设您的终端使用 ASCII 或 UTF8。就此解释而言,它们是等价的。
当您键入 123
时,read
不会将其作为数字。它把它看作一个字节序列——因为你说它应该寻找填充一个 2-char
缓冲区,它看到前两个字节:首先是 0x31,然后是 0x32。它读取第一个字节,然后读取第二个字节;它不会将它们解释为数字。当解码为 ASCII 或 UTF8 时,字节序列 碰巧 表示一个数字是无关紧要的; C 所关心的是实际的字节序列,这就是它给你的。
请注意,它甚至看不到 第三个字节。它留在输入流中,供以后的输入操作使用。
如果这就是您想要的,那就太好了!如果你想输入一个数字(即输入为字节字符串,其值与十进制数对齐),请查看 fscanf
及其相关函数。