OneCompiler

slip6&slip20

125

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

typedef struct {
char* filename;
off_t size;
} FileEntry;

int compareFileSize(const void* a, const void* b) {
FileEntry* fileA = (FileEntry*)a;
FileEntry* fileB = (FileEntry*)b;

return fileA->size - fileB->size;

}

int main(int argc, char* argv[]) {
if (argc < 2) {
printf("Usage: %s <file1> <file2> <file3> ...\n", argv[0]);
return 1;
}

FileEntry* files = (FileEntry*)malloc((argc - 1) * sizeof(FileEntry));
if (files == NULL) {
    perror("Error allocating memory");
    return 1;
}

for (int i = 1; i < argc; i++) {
    struct stat fileStat;
    if (stat(argv[i], &fileStat) == -1) {
        fprintf(stderr, "Error getting file information: %s\n", argv[i]);
        continue;
    }

    files[i - 1].filename = argv[i];
    files[i - 1].size = fileStat.st_size;
}

qsort(files, argc - 1, sizeof(FileEntry), compareFileSize);

printf("Filenames in ascending order of sizes:\n");
for (int i = 0; i < argc - 1; i++) {
    printf("%s\n", files[i].filename);
}

free(files);

return 0;

}