我正在读取Unix的档案文件,我想读取文件并打印档案中的文件和文件名。例如,我需要hello.c
而不是hello.c 123124123 001004002 1000 0
。
这是我现在的
input_fd = open(archive_name, O_RDONLY);
while( (read(input_fd, buf, BUF_SIZE)) > 0) {
printf("%s\n", buf);
}
close(input_fd);
答案 0 :(得分:2)
你在做什么对我来说似乎很奇怪,但如果你有一个C字符串(你在代码中打印buf
并且它产生合理的输出)你可以尝试NUL终止它:
char *p;
if ((p = strchr(buf, ' '))
*p = 0;
printf("%s\n", buf);
答案 1 :(得分:0)
您的代码需要多么便携?到目前为止,实现此效果的最简单方法是使用ar
命令本身。要获得您想要的输出:
ar t archive
存在许多存档格式,并且仍然存在许多常用的变体(特别是AIX与“其余”有很大不同)。处理长文件名的方法有很多种。要准确读取存档,您需要能够读取标题,可能是字符串列表,跳过与定义的库符号相关的伪文件,然后处理每个文件标题并跳过文件本身,重复直到归档结束。当您阅读标题时,您需要适当地拆分它以仅隔离名称。