#include #include #include #include #include int main(int argc, char *argv[]) { // 1. Check if the filename was provided via argv if (argc < 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return EXIT_FAILURE; } struct stat file_stats; // 2. Pass the filename to the lstat syscall if (lstat(argv[1], &file_stats) < 0) { perror("lstat error"); return EXIT_FAILURE; } // 3. Display some basic metadata printf("Information for: %s\n", argv[1]); printf("---------------------------\n"); printf("File Size: \t\t%lld bytes\n", (long long)file_stats.st_size); printf("Number of Links: \t%ld\n", (long)file_stats.st_nlink); printf("File inode: \t\t%ld\n", (long)file_stats.st_ino); // 4. Determine file type using macros printf("File Type: \t\t"); if (S_ISLNK(file_stats.st_mode)) printf("Symbolic Link\n"); else if (S_ISREG(file_stats.st_mode)) printf("Regular File\n"); else if (S_ISDIR(file_stats.st_mode)) printf("Directory\n"); else printf("Other\n"); return EXIT_SUCCESS; }