Так что в настоящее время мой текущий код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define sizeFileName 500
#define filesMax 5000
int main( int argc, char ** argv) {
FILE * fp = popen( "find . -type f", "r");
char * type = argv[1];
//printf("%s\n",type);
int amount = atoi(argv[2]);
//printf("%d\n",amount);
char buff[sizeFileName];
int nFiles = 0;
char * files[filesMax];
while(fgets(buff,sizeFileName,fp)) {
int leng = strlen(buff) - 1;
if (strncmp(buff + leng - 4, type, 4) == 0){
files[nFiles] = strndup(buff,leng);
//printf("\t%s\n", files[nFiles]);
nFiles ++;
}
}
fclose(fp);
printf("Found %d files\n", nFiles);
long long totalBytes = 0;
struct stat st;
for(int i = 0;i< nFiles; i ++) {
if(0!= stat(files[i],&st)){
perror("stat failed:");
exit(-1);
}
totalBytes += st.st_size;
printf("%s : %ld\n",files[i],st.st_size);
}
printf("Total size: %lld\n", totalBytes);
// clean up
for(int i = 0; i < nFiles ; i ++ ) {
free(files[i]);
}
return 0;
}
Вывод будет:
./find .txt 5
Found 39 files
./Work/assignment 3/testing/README.txt : 234
./Work/assignment 3/testing/typescript.txt : 30998
./Work/assignment 5/README.txt : 175
./Work/assignment 2/README.txt : 233
./Work/assignment 2/typescript.txt : 18095
./Work/typescript.txt : 12503
./Work/assignment 1/assignment01_test.txt : 3356
./Work/assignment 1/cpsc231_A1_dou.txt : 1807
./.pki/nssdb/pkcs11.txt : 452
./simple.txt : 55
./.cache/tracker/locale-for-miner-user-guides.txt : 11
./.cache/tracker/no-need-mtime-check.txt : 5
./.cache/tracker/locale-for-miner-apps.txt : 11
./.cache/tracker/db-version.txt : 2
./.cache/tracker/first-index.txt : 5
./.cache/tracker/parser-sha1.txt : 40
./.cache/tracker/parser-version.txt : 22
./.cache/tracker/db-locale.txt : 11
./.cache/tracker/last-crawl.txt : 10
./romeo-and-juliet.txt : 178983
./335/335 assign1/script2.txt : 2517
./335/335 assign1/script1.txt : 4543
./335/assign4 folder/script.txt : 42042
./script.txt : 8918
./readme.txt : 3243
./.mozilla/firefox/7rzagn8z.default/AlternateServices.txt : 0
./.mozilla/firefox/7rzagn8z.default/revocations.txt : 43369
./.mozilla/firefox/7rzagn8z.default/TRRBlacklist.txt : 0
./.mozilla/firefox/7rzagn8z.default/serviceworker.txt : 310
./.mozilla/firefox/7rzagn8z.default/SecurityPreloadState.txt : 0
./.mozilla/firefox/7rzagn8z.default/SiteSecurityServiceState.txt : 7776
./.mozilla/firefox/7rzagn8z.default/pkcs11.txt : 890
./.config/libreoffice/4/user/uno_packages/cache/log.txt : 1015
./.thunderbird/os4hur49.default/SiteSecurityServiceState.txt : 150
./.thunderbird/os4hur49.default/revocations.txt : 8243
./.thunderbird/os4hur49.default/SecurityPreloadState.txt : 0
./.thunderbird/os4hur49.default/AlternateServices.txt : 0
./Templates/demo.txt : 9
./Templates/typescript.txt : 1549
Total size: 371582
В настоящее время мой первый аргумент - это взять тип файла, который я ищу, покавторой аргумент - предположим, что мы берем значение int желаемой суммы.(Это еще не установлено в моем коде, однако я могу позаботиться об этом самостоятельно) Однако, как показано в выводе, все это не отсортировано.Мне было интересно, что они в любом случае распечатать содержимое char * files
, но в отсортированном порядке от большинства байтов до наименьшего количества байтов?