*编辑 - 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)。为什么会这样?
答案 0 :(得分:0)
This回答表明POSIX和GNU工具在用于计算总数的块大小上有所不同。尝试将h
添加到您的命令并比较结果(此标志使单位显式)。我的猜测是这些过程的执行环境扰乱了结果。例如,它可能与您正在运行的ls
不同。
答案 1 :(得分:0)
确保您在shell中运行的ls
和程序中运行的ls
是相同的程序。
您的程序正在指定/bin/ls
作为要运行的程序;您可以使用shell命令which ls
在shell提示符下键入命令时找到正在运行的内容(另请参阅type ls
)。
如果这些不同,可能是由于总大小计算中使用的POSIX与GNU块大小。