免责声明:这是作业。我没有要求明确的代码。相反,我只要求足够的帮助,以便我可以理解我的问题并自己改正。文件IO看起来没有正确读取
我试图按照家庭作业重新创建Unix ar
实用程序。这个任务的大部分处理文件IO在C中,其他部分处理系统调用等。
在这个实例中,我打算创建一个存档中所有文件的简单列表。你可能会注意到,我还没有走得很远。该计划相对简单:从档案文件中读取每个文件标题,并仅打印ar_hdr.ar_name
中保存的值。其余的字段将通过fseek()
(包括文件数据)跳过,直到到达另一个文件,此时该过程再次开始。如果达到EOF,则该功能简单地终止。
我几乎没有使用文件IO的经验,所以我在这个任务中已经处于劣势。我尽力研究实现我目标的正确方法,并且我相信我已尽我所能地实施了这些目标。也就是说,我的实施似乎有些问题。来自档案文件的数据似乎不被读取,或者至少被存储为变量。这里是我的代码:
struct ar_hdr
{
char ar_name[16]; /* name */
char ar_date[12]; /* modification time */
char ar_uid[6]; /* user id */
char ar_gid[6]; /* group id */
char ar_mode[8]; /* octal file permissions */
char ar_size[10]; /* size in bytes */
};
void table()
{
FILE *stream;
char str[sizeof(struct ar_hdr)];
struct ar_hdr temp;
stream = fopen("archive.txt", "r");
if (stream == 0)
{
perror("error");
exit(0);
}
while (fgets(str, sizeof(str), stream) != NULL)
{
fscanf(stream, "%[^\t]", temp.ar_name);
printf("%s\n", temp.ar_name);
}
if (feof(stream))
{
// hit end of file
printf("End of file reached\n");
}
else
{
// other error interrupted the read
printf("Error: feed interrupted unexpectedly\n");
}
fclose(stream);
}
在这一点上,我只想能够正确读取数据。在完成之后,我将努力寻找下一个文件。然而,我想重申一下我的观点,即我并没有要求明确的代码 - 我需要学习这些东西,让某人给我提供工作代码不会那样做。
+1的写作方式可以减轻所有关于作业的“无庸质疑”的评论。 – ChiefTwoPencils