gpt4 book ai didi

c - 意外输入 62;9;c62;9;c62;9;c62;9;c 在将缓冲区写入标准输出后出现在 shell 中

转载 作者:IT王子 更新时间:2023-10-29 01:26:15 25 4
gpt4 key购买 nike

目标是读取文件并将缓冲区直接写入标准输出,以便它可用于进一步处理。这符合文本文件、图像和 pdf 的预期。但是当阅读 pdf 文件时,shell 输入中会显示一个奇怪的输入,即:62;9;c62;9;c62;9;c62;9;c。我在 Ubuntu 14.04.3 LTS (14.04) trusty 上编译了 test.c。

shell

user@user-virtualmachine:~$./test
<prints binary data here
...
...
end of binary data>
user@user-virtualmachine:~$62;9;c62;9;c62;9;c62;9;c

当我检查 md5sum 时,它是一个匹配项,所以没有什么奇怪的:

md5sum paper.pdf
5152a6c5b7deb364385fb3dd27c586db paper.pdf

./test | md5sum
5152a6c5b7deb364385fb3dd27c586db -

我试图在网上查找它,它说某些二进制数据可能会导致 shell 在将其写入标准输出时以意外的方式运行。这个问题能解决吗?下面提供了代码。

测试.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
ssize_t bytes_read;
char buffer[1024];
int fd;

fd = open("paper.pdf", O_RDONLY);
if(fd < 0) {
perror("Error in reading file");
exit(1);
}

do {
bytes_read = read(fd, buffer, 1024);
if(bytes_read > 0) {
write(fileno(stdout), buffer, bytes_read);
}
} while(bytes_read > 0);

close(fd);

return 0;
}

最佳答案

PDF 文件是二进制 文件。虽然它们可以包含文本,但它们可以并且确实包含非文本数据。

要解决这个问题:不要将二进制数据转储到 shell 的输出中。二进制数据来自何处并不重要 - 尝试 cat/usr/bin/bash。你会得到相同的结果。防止这种情况“弄乱”您的 shell 输出的唯一方法是不这样做。

关于c - 意外输入 62;9;c62;9;c62;9;c62;9;c 在将缓冲区写入标准输出后出现在 shell 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33190113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com