我有一个从STDIO_FILENO读取的程序。输入源是一个txt文件,其中包含15个整数。调用read并将返回值存储在n中之后。我用gdb打印n来检查它。Gdb告诉我read返回了45个字节。我期望基于(32位x 15)/8的60字节。有人能向我解释一下我在哪里计算得不好吗。
#define BUFFSIZE 4096
int main(int argc, char * argv[])
{
int n;
char buf[BUFFSIZE];
while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
if(write(STDOUT_FILENO, buf, n) != n)
err_sys("write error");
if(n < 0)
err_sys("read error");
exit(0);
}
Breakpoint 1, main (argc=1, argv=0x7fff5fbffb38) at stdin_stdout.c:10
10 while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
(gdb) print n
$1 = 0
(gdb) n
Breakpoint 2, main (argc=1, argv=0x7fff5fbffb38) at stdin_stdout.c:11
11 if(write(STDOUT_FILENO, buf, n) != n)
(gdb) print n
$2 = 45
您混淆了数字和数字的表示。由于这是一个文本文件,所以它包含文本,而不是整数。
例如,你可以将文本"12 32"转换为整数12和整数32,但你必须这样做。你必须使用基数10,并且必须同意用空格分隔整数。如果每个字符为一个字节,则文本将为五个字节。如果需要,可以将其转换为8个字节(两个32位整数)。但这种转换实际上是必须完成的,而不是它自己。