计算从读取操作

时间:2015-11-18 01:44:25

标签: c debugging unix gdb

我有一个从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

1 个答案:

答案 0 :(得分:1)

您将数字与数字表示混淆。由于这是一个文本文件,它包含文本,而不是整数。

例如,您可以转换文本&#34; 12 32&#34;进入整数十二和整数三十二,但你必须这样做。你必须使用基数10,你必须同意一个空格分隔整数。如果每个字符是一个字节,则文本将是五个字节。然后,如果需要,可以将其转换为8个字节(两个32位整数)。但是,转换必须实际完成,它本身并没有。