c-如何在linux中控制终端输出格式



我的任务是编写LS命令的另一个小版本。我成功地读取了一个目录,并将文件名存储到一个排序数组中。我的问题是如何将它们以列格式打印出来。如何使用系统调用ioctl()来帮助我处理格式?

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

假设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 10KBn", filenames_len, filenames[i]);
}

printf可以填充字符串,这就是我们在这里所做的。首先获取最长的文件名,然后用它来填充其余的文件名。

最新更新