在ls

时间:2018-11-29 20:37:37

标签: c ls

我正在编写ls命令的实现,但是我发现了一个问题 列,我想像真正的ls -l <​​/ p>一样对齐它们

drwx------@   3   haxor123 candidate  102  Oct  3 14:43 Applications
drwxr-xr-x    21   haxor123 candidate  714  Nov 29 21:07 Desktop
drwxr-xr-x    4   haxor123 candidate  136  Nov  6 19:54 Documents
drwx------    9   haxor123 candidate  306  Nov 28 22:28 Downloads
drwxr-xr-x@   396   haxor123 candidate  13464  Nov 29 19:52 Library
drwx------+   3   haxor123 candidate  102  Aug  9 16:38 Movies
drwx------+   4   haxor123 candidate  136  Oct  5 14:13 Music
drwxr-xr-x    3   haxor123 candidate  102  Oct  4 23:23 PicineRe
drwxr-xr-x    4   haxor123 candidate  136  Oct  4 23:52 PicineRee
drwxr-xr-x    3   haxor123 candidate  102  Oct  4 22:32 PicineReloaded
drwx------+   4   haxor123 candidate  136  Nov 11 16:46 Pictures
drwxr-xr-x    6   haxor123 candidate  204  Nov 12 21:38 exam-basedir
lrwxr-xr-x    1   haxor123 candidate  34  Jul 16 10:12 goinfre -> 
/Volumes/Storage/goinfre/haxor123/
drwxr-xr-x    4   haxor123 candidate  136  Oct  3 15:14 s

这是ls -l函数的一部分

temp = list;
ft_putstr("total ");
printblocks(list);
ft_putchar('\n');
while (temp != NULL)
{
    lstat(temp->full_path, &fstat);
    ft_permissions(temp, fstat);
    ft_putstr("  ");
    bytes1 = ft_itoa(fstat.st_nlink);
    ft_putstr(bytes1);
    ft_putstr(get_user(fstat));
    bytes = ft_itoa(fstat.st_size);
    len = ft_strlen(bytes);
    ft_putstr(ft_strjoin(bytes, "  "));
    get_time(fstat, temp);
    temp = temp->next;
    if (temp != NULL)
        ft_putchar('\n');

1 个答案:

答案 0 :(得分:1)

如果您想直接阅读GNU命令的源代码,可以这样做...这可能是一个很好的学习经验:

Where can I find source code for Linux core commands?

尤其是ls.c

http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c

确切知道“ ls的工作方式”的唯一方法来自该文件。我们不是心态(至少我不是),所以如果您要问任何其他编程方法,那么它必须独立存在于您的问题中,您要具体实现什么以及为什么不能做到这一点实现它。