Unix - 管道ls - la |较少的C可执行文件,与shell相比,文件总大小增加

时间:2015-02-27 18:59:42

标签: shell unix pipeline

*编辑 - Stephen在下面的评论中回答了这个问题*

所以基本上我已经做了两个单独的子进程(使用两个单独的方法和自己的fork)来执行命令ls -la |少用管道。

第一个像这样执行ls:

execl("/bin/ls", "ls", "-la", NULL);

第二个子进程的执行方式不像这样:

execlp("less", "less", NULL);

结果很好......除了一小部分:

使用shell命令的结果:

total 15
drwxr-xr-x 2 daniel staff 4 2015-02-27 18:58 .
drwxr-xr-x 15 daniel staff 24 2015-02-27 18:58 ..
-rwxr-xr-x 1 daniel staff 9280 2015-02-27 18:58 pipes
-rw-r--r-- 1 daniel staff 1419 2015-02-27 18:58 pipes.c

使用我的可执行文件的结果:

total 30
drwxr-xr-x 2 daniel staff 4 Feb 27 18:58 .
drwxr-xr-x 15 daniel staff 24 Feb 27 18:58 ..
-rwxr-xr-x 1 daniel staff 9280 Feb 27 18:58 pipes
-rw-r--r-- 1 daniel staff 1419 Feb 27 18:58 pipes.c

现在日期是我不关心的另一种格式.. 但是我的可执行文件的总大小是两倍(30 vs 15)。为什么会这样?

2 个答案:

答案 0 :(得分:0)

This回答表明POSIX和GNU工具在用于计算总数的块大小上有所不同。尝试将h添加到您的命令并比较结果(此标志使单位显式)。我的猜测是这些过程的执行环境扰乱了结果。例如,它可能与您正在运行的ls不同。

答案 1 :(得分:0)

确保您在shell中运行的ls和程序中运行的ls是相同的程序。

您的程序正在指定/bin/ls作为要运行的程序;您可以使用shell命令which ls在shell提示符下键入命令时找到正在运行的内容(另请参阅type ls)。

如果这些不同,可能是由于总大小计算中使用的POSIX与GNU块大小。