C - 使用系统调用打印文件?

时间:2016-11-04 14:28:12

标签: c command-line

我正在尝试使用系统调用和C.我正在尝试读取文件并将所有内容写入命令行。我正在尝试

int handle = open("./test.txt", O_RDONLY, O_TEXT);
char buf[1];
lseek(handle, 0, SEEK_SET);
while (0 != read(handle, buf, 1)) {
        printf(*buf);
}

此ALMOST有效,除了它在从文件读取的每个字符后添加一些乱码字符。例如,如果文件包含asd asd,则会将a:_s:_d:_ :_a:_s:_d写入控制台。知道为什么吗?我该如何解决?

2 个答案:

答案 0 :(得分:2)

每个字符串都必须以\0(null)字符结尾。

因此,请尝试将缓冲区大小设为2,并在printf之前buf[1] = '\0';

通常,当您阅读wcnt (type ssize_t)个字符时,您会buf[wcnt] = '\0';

此外,您的printf未正确<*>>语法! printf("%s", buf);

编辑:正如其他答案和评论中提到的(我不会添加它,因为我没有先提出它),你可以在这种情况下打印一个字符。

答案 1 :(得分:2)

您的代码应该在大多数现代编译器上产生警告。因为printf()不接受 char 。由于您正在通过char读取文件char,因此您可以使用putchar()在stdout上打印。

while (read(handle, buf, 1) == 1) {
    putchar(buf[0]);
}