我有一个从STDIO_FILENO读取的程序。输入源是一个txt文件,其中包含 15个整数 。调用read并将返回的值存储在 n 中。我用gdb print 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
答案 0 :(得分:1)
您将数字与数字表示混淆。由于这是一个文本文件,它包含文本,而不是整数。
例如,您可以转换文本&#34; 12 32&#34;进入整数十二和整数三十二,但你必须这样做。你必须使用基数10,你必须同意一个空格分隔整数。如果每个字符是一个字节,则文本将是五个字节。然后,如果需要,可以将其转换为8个字节(两个32位整数)。但是,转换必须实际完成,它本身并没有。