我的任务是编写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
可以填充字符串,这就是我们在这里所做的。首先获取最长的文件名,然后用它来填充其余的文件名。