Tuyên bố từ chối trách nhiệm: đây là một bài tập. Tôi không yêu cầu mã rõ ràng. Thay vào đó, tôi chỉ yêu cầu đủ sự giúp đỡ để tôi có thể hiểu được vấn đề của mình và tự sửa nó.Tệp IO dường như không đọc chính xác
Tôi đang cố gắng tạo lại tiện ích Unix ar
theo bài tập về nhà. Phần lớn nhiệm vụ này đề cập đến tệp IO trong C và các phần khác xử lý các cuộc gọi hệ thống, v.v.
Trong trường hợp này, tôi dự định tạo một danh sách đơn giản của tất cả các tệp trong lưu trữ. Tôi đã không đi xa, như bạn có thể nhận thấy. Kế hoạch tương đối đơn giản: đọc từng tiêu đề tệp từ tệp lưu trữ và chỉ in giá trị được giữ trong ar_hdr.ar_name
. Phần còn lại của các trường sẽ bị bỏ qua qua fseek()
, bao gồm dữ liệu tệp, cho đến khi một tệp khác được tiếp cận, tại thời điểm đó quá trình bắt đầu lại. Nếu đạt được EOF, hàm chỉ đơn giản chấm dứt.
Tôi có ít kinh nghiệm với tệp IO, vì vậy tôi đã gặp bất lợi với nhiệm vụ này. Tôi đã cố hết sức để nghiên cứu những cách thức phù hợp để đạt được mục tiêu của mình, và tôi tin rằng tôi đã thực hiện chúng theo khả năng tốt nhất của tôi. Điều đó nói rằng, có vẻ như đã xảy ra sự cố với việc triển khai của tôi. Dữ liệu từ tệp lưu trữ dường như không được đọc hoặc ít nhất được lưu trữ dưới dạng biến. Đây là mã của tôi:
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);
}
Tại thời điểm này, tôi chỉ muốn có thể đọc dữ liệu chính xác. Tôi sẽ làm việc để tìm kiếm tập tin tiếp theo sau khi kết thúc. Tuy nhiên, tôi muốn nhắc lại quan điểm của mình rằng tôi không yêu cầu mã rõ ràng - tôi cần phải tìm hiểu công cụ này và nhờ ai đó cung cấp cho tôi mã làm việc sẽ không làm điều đó.
+1 để viết theo cách làm giảm bớt nhu cầu cho tất cả nhận xét "blah-blah về bài tập về nhà". – ChiefTwoPencils