从 HDFS 读取和打印文本文件
Read and print text file from HDFS
我有这个短代码,它使用libhdfs从Hadoop文件系统(HDFS(上的文本文件中读取字节。它编译并工作正常。我现在正在尝试更改代码,以便我也可以读取文本文件的内容。
以下是我现在用于从HDFS打印文本文件的代码:
#include "jni.h"
#include "hdfs.h"
#include "string.h"
#include "stdlib.h"
int
main(int argc, char **argv)
{
int MAXBUFLEN = 1024;
hdfsFS fs = hdfsConnect("default", 0);
const char* readPath = "/tmp/testfile.txt";
hdfsFile readFile = hdfsOpenFile(fs, readPath, O_RDONLY, 0, 0, 0);
if(!readFile) {
fprintf(stderr, "Failed to open %s for writing!n", readPath);
exit(-1);
}
char buffer[MAXBUFLEN+1];
int bytes = hdfsRead(fs, readFile, buffer, strlen(buffer));
buffer[MAXBUFLEN] = ' ';
hdfsCloseFile(fs, readFile);
return 0;
}
您应该以这种方式初始化缓冲区:
char buffer[MAXBUFLEN+1] = {};
然后将最大缓冲区长度(不要使用 strlen
(传递给 Read 函数:
int bytes = hdfsRead(fs, readFile, buffer, MAXBUFLEN);
不需要此行:
buffer[MAXBUFLEN] = ' ';
因为缓冲区已正确初始化。然后,您可以将整个缓冲区输出为 c 字符串:
std::cout << buffer << std::endl;
现在,字符串长度应等于读取字节数:
assert(strlen(buffer)==bytes);
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入