c-计算读取操作返回的字节数



我有一个从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位整数)。但这种转换实际上是必须完成的,而不是它自己。

最新更新