Unix - 管道 ls - la |与 shell 相比,更少的 C 可执行文件提供了两倍的总文件大小
Unix - pipeline ls - la | less C executable giving double total file size vs shell
*编辑 - 斯蒂芬在下面的评论中回答了这个问题 *
所以基本上我已经创建了两个单独的子进程(使用两个单独的方法和它们自己的 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 对 15)。为什么会这样?
This 答案表明 POSIX 和 GNU 工具在用于计算总数的块大小上有所不同。尝试将 h
添加到您的命令并比较结果(此标志使单位明确)。我的猜测是这些进程的执行环境干扰了结果。例如,它可能与您 运行 不同 ls
。
确保您在 shell 中 运行ning 的 ls
和程序中 运行ning 的 ls
相同程序。
您的程序将 /bin/ls
指定为 运行 的程序;当您在 shell 提示符下使用 shell 命令 which ls
键入命令时,您可以找出 运行 是什么(另请参阅 type ls
)。
如果这些不同,可能是由于 POSIX 与总大小计算中使用的 GNU 块大小有关。
*编辑 - 斯蒂芬在下面的评论中回答了这个问题 *
所以基本上我已经创建了两个单独的子进程(使用两个单独的方法和它们自己的 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 对 15)。为什么会这样?
This 答案表明 POSIX 和 GNU 工具在用于计算总数的块大小上有所不同。尝试将 h
添加到您的命令并比较结果(此标志使单位明确)。我的猜测是这些进程的执行环境干扰了结果。例如,它可能与您 运行 不同 ls
。
确保您在 shell 中 运行ning 的 ls
和程序中 运行ning 的 ls
相同程序。
您的程序将 /bin/ls
指定为 运行 的程序;当您在 shell 提示符下使用 shell 命令 which ls
键入命令时,您可以找出 运行 是什么(另请参阅 type ls
)。
如果这些不同,可能是由于 POSIX 与总大小计算中使用的 GNU 块大小有关。