Là một phần của một bài tập từ một trong các lớp học của tôi, tôi phải viết một chương trình trong C để nhân đôi kết quả của lệnh ls -al. Tôi đã đọc về các tài liệu cần thiết nhưng tôi vẫn chưa nhận được kết quả đúng. Đây là mã của tôi cho đến nay, nó chỉ có nghĩa vụ để in ra kích thước tập tin và tên tập tin, nhưng kích thước tập tin in ấn của nó là không chính xác.Thực hiện lệnh ls -al trong C
Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main(int argc, char* argv[])
{
DIR *mydir;
struct dirent *myfile;
struct stat mystat;
mydir = opendir(argv[1]);
while((myfile = readdir(mydir)) != NULL)
{
stat(myfile->d_name, &mystat);
printf("%d",mystat.st_size);
printf(" %s\n", myfile->d_name);
}
closedir(mydir);
}
Đây là kết quả của tôi sau khi thực hiện mã:
[[email protected] ~]# ./a.out Downloads
4096 ..
4096 hw22.c
4096 ankur.txt
4096 .
4096 destination.txt
Dưới đây là các kích thước chính xác:
[[email protected] ~]# ls -al Downloads
total 20
drwxr-xr-x. 2 root root 4096 Nov 26 01:35 .
dr-xr-x---. 24 root root 4096 Nov 26 01:29 ..
-rw-r--r--. 1 root root 27 Nov 21 06:32 ankur.txt
-rw-r--r--. 1 root root 38 Nov 21 06:50 destination.txt
-rw-r--r--. 1 root root 1139 Nov 25 23:38 hw22.c
bất cứ ai có thể vui lòng chỉ ra sai lầm của tôi.
Cảm ơn,
Ankur
Làm việc tốt cho tôi. Kiểm tra giá trị trả về của stat() để xem có lỗi hay không. – Neal
Hoạt động tốt ở đây. Giới thiệu kiểm tra lỗi cho mọi thứ (opendir(), readdir(), stat()). –
Hoạt động tốt nếu bạn chạy nó trên '.', nhưng không phải nếu bạn cung cấp cho nó một thư mục khác. –