Bir programın ls'ye benzer bir biçimde yazılması. Programımın -S işaretini uygulaması gerekir, bu, ne tür bir dizin belirtilmişse (veya olmasa da geçerli olanı), içeriğini bayt cinsinden sıralar.Scandir'i kullanıp boyuta göre sıralama
Açıkçası, alfabetik sıralamayı scandir ve alphasort ile kolayca yapabilirsiniz (bkz. https://www.cs.cf.ac.uk/Dave/C/node20.html). Benim sorum, scandir'i, içeriklerinin büyüklüğüne göre iki girişi karşılaştıran bir karşılaştırıcı işleviyle kullanıp kullanamayacağınızdır.
Alternatif olarak, karşılaştırıcı işlevi için NULL belirtebilir, sıralanmamış diziye sahip olabilir ve sonra kendimi qsort() işleviyle sıralayabilirim.
Herhangi bir tavsiye çok takdir edilmektedir. Herhangi bir açıklama gerekli, sadece yorumlarda belirtin.
'** #define scandir (const char * dir, yapı dirent *** isimlistesi, int (* sel) (const yapı dirent *), int (* karş) (const yapı dirent olan struct dirent **)); ', iki basamaklı dizin girişlerinde her bir' stat 'kullanan bir karşılaştırıcı işlev yazabilir ve boyutları uygun gördüğünüz şekilde karşılaştırabilirsiniz. Zorluk stat verilerinin önbelleğe alınmasıdır; Bunu yapmak için açık bir yol yoktur, ancak binlerce dosya varsa, muhtemelen her karşılaştırma yaptığınızda iki stat sistemli çağrı yürütmek istemezsiniz. –
Sorunuz nedir? Zaten cevabı biliyorsunuz .. scandir bir karşılaştırıcı işlevi alır, bu yüzden evet doğru karşılaştırıcıyı geçebilirsiniz. –
Eugene, belki de açıklığa kavuşturmalıyım - nokta, karşılaştırıcı işlevinin iki dirent yapısını kabul etmesidir. Direk yapısının, farkında olduğum kadarıyla, bayt cinsinden şeyin boyutunu içermiyor. –