Unix – pipeline ls – la | moins d’exécutable C donnant le double de la taille totale du fichier par rapport au shell

* Edit – Stephen a répondu à cette question dans les commentaires ci-dessous *

Donc, fondamentalement, j’ai fait deux processus enfants séparés (en utilisant deux méthodes séparées avec leur propre fork) pour exécuter la commande ls -la | moins utiliser le tuyau.

Le premier exécute ls comme ceci:

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

Le deuxième processus enfant s’exécute moins comme ceci:

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

Et les résultats se présentent bien … à part une petite partie:

Résultats en utilisant la commande 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 

Résultats en utilisant mon exécutable:

 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 

Maintenant, la date étant un format différent, je m’en fous, mais la taille totale est deux fois plus grande avec mon exécutable (30 vs 15). Pourquoi cela arrive-t-il?

Assurez-vous que le ls vous exécutez à partir du shell et le ls qui s’exécute dans votre programme sont le même programme.

Votre programme spécifie /bin/ls comme programme à exécuter; vous pouvez découvrir ce qui est exécuté lorsque vous tapez la commande à l’invite du shell en utilisant la commande shell which ls (voir aussi le type ls ).

Si elles sont différentes, cela pourrait être dû à la taille de bloc POSIX vs GNU utilisée dans le calcul de la taille totale.

Cette réponse indique que les outils POSIX et GNU diffèrent par la taille de bloc utilisée pour calculer le total. Essayez d’append h à votre commande et comparez les résultats (cet indicateur rend les unités explicites). Je suppose que l’environnement d’exécution de ces processus perturbe le résultat. Par exemple, ce ne sont peut-être pas les mêmes que vous exécutez.