gpt4 book ai didi

c - 用 C 打印存档文件的内容

转载 作者:行者123 更新时间:2023-11-30 18:41:54 25 4
gpt4 key购买 nike

我在这里发布了同样的问题:

How to print the name of the files inside an archive file?

但这些答案并不一定能解决问题。我有一个存档文件 week.a,我想打印出该存档内文件的名称,称为 mon.txt 和 fri.txt。

它应该像 ar -t 命令一样工作,只是我不允许使用它。

我尝试过的: 我的第一次尝试是创建一个 for 循环并打印出参数,但后来我意识到该文件此时已经存档,因此这是行不通的。 我的第二次尝试是查看 ar 的 print_contents 函数,我在下面列出了该函数:

static void
print_contents (bfd *abfd)
{
size_t ncopied = 0;
char *cbuf = (char *) xmalloc (BUFSIZE);
struct stat buf;
size_t size;
if (bfd_stat_arch_elt (abfd, &buf) != 0)
/* xgettext:c-format */
fatal (_("internal stat error on %s"), bfd_get_filename (abfd));

if (verbose)
printf ("\n<%s>\n\n", bfd_get_filename (abfd));

bfd_seek (abfd, (file_ptr) 0, SEEK_SET);

size = buf.st_size;
while (ncopied < size)
{

size_t nread;
size_t tocopy = size - ncopied;
if (tocopy > BUFSIZE)
tocopy = BUFSIZE;

nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd);
if (nread != tocopy)
/* xgettext:c-format */
fatal (_("%s is not a valid archive"),
bfd_get_filename (bfd_my_archive (abfd)));

/* fwrite in mingw32 may return int instead of size_t. Cast the
return value to size_t to avoid comparison between signed and
unsigned values. */
if ((size_t) fwrite (cbuf, 1, nread, stdout) != nread)
fatal ("stdout: %s", strerror (errno));
ncopied += tocopy;
}
free (cbuf);
}

但是通过这条路线,我真的不知道很多代码的含义或作用(我对 C 非常陌生)。有人可以帮助理解这段代码,或者为我指明编写程序的正确方向吗?谢谢。

最佳答案

基于 wikipedia.org/wiki/Ar_(Unix) 的格式,您的程序的基本形状将是:

fopen(filename)
fscanf 8 characters/* global header */
check header is "!<arch>" followed by LF
while not at end of file /* check return value of fcanf below */
fscanf each item in file header
print filename /* first 16 characters of file header */
check magic number is 0x60 0x0A
skip file size characters /* file contents - can use fseek with origin = SEEK_CUR */

fclose(file)

请参阅C stdio library documentation 了解所需功能的详细信息。或参见Wikipedia C file input/output

关于c - 用 C 打印存档文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483587/

25 4 0
文章推荐: c# - 公开一个包含更改跟踪的持久数据集
文章推荐: javascript - Mootools - 如何获取 droppables css 统计信息?
文章推荐: c# - 在 asp.net 应用程序中重定向页面时删除引荐来源信息
文章推荐: php -