2014-10-22 7 views
0

Моя задача - написать еще одну небольшую версию команды LS. Я успешно прочитал каталог и сохранил имена файлов в отсортированном массиве. Мой вопрос заключается в том, как распечатать их в формате столбцов. И как использовать системный вызов ioctl(), чтобы помочь мне в формате?Как управлять форматом вывода вывода в linux?

$ ls 
    file.txt  file2.txt  file5.txt  file8.txt 
    file0.txt  file3.txt  file6.txt  file9.txt 
    file1.txt  file4.txt  file7.txt 
+0

Используйте вкладки для отступов и пробелов для выравнивания. Насколько я знаю, 'ioctl' не имеет отношения к форматированию. – bzeaman

ответ

0

Предполагая, что filenames представляет собой массив, содержащий строки C с именами файлов и filenames_size это количество строк C в этом массиве.

char **filenames; 
size_t filenames_size; 
size_t filenames_len = 0; 
for (size_t i = 0; i < filenames_size; ++i) { 
    size_t len = strlen(filenames[i]); 
    if (filenames_len < len) { 
     filenames_len = len; 
    } 
} 
for (size_t i = 0; i < filenames_size; ++i) { 
    printf("rwxrwxrwx %-*s 10KB\n", filenames_len, filenames[i]); 
} 

printf может, подушечка строка, которая является то, что мы делаем здесь. Сначала получите самое длинное имя файла, а затем используйте его для прокладки остальных.

+0

Спасибо за ваш ответ Бенно. Но мне просто нужно распечатать имена файлов в формате столбцов. Никакой другой информации о файлах не требуется. Например, char * filename [] = {file1.txt, file2.txt .......... file10.txt}. – stanlopfer

+0

Мой профессор говорит мне использовать ioctl() в качестве подсказки для формата колонки. – stanlopfer

+0

Я думаю, что у меня был ваш вопрос неправильно. Я попытаюсь отредактировать его как можно скорее. Посмотрите на этот ответ: http://stackoverflow.com/a/1022961/2703418 – bzeaman

Смежные вопросы