ltrace
zeigt den Aufruf der Bibliothek. In diesem Fall zeigt es die Funktion aus der libc
die der Quellcode aufruft.
Wenn Sie sehen pwd
finden Sie im Quelltext (coreutils-8.13, Datei lib/xgetcwd.c):
char *cwd = getcwd (NULL, 0);
Also, ltrace
korrekt ist: pwd
führt aus. getcwd(NULL, 0)
. Laut der Linux-Manpage getcwd(3)
:
getcwd() weist den Puffer dynamisch mit malloc(3) zu, wenn buf NULL ist.
Allerdings ist der Systemaufruf getcwd(2)
benötigt immer ein erstes Argument ungleich NULL, um den Pfadnamen dorthin zu kopieren. Sie können sehen, wie dies in den libc-Quellen (eglibc-3.13, Datei sysdeps/unix/sysv/linux/getcwd.c) gemacht wird.
Der Aufruf der Bibliothek getcwd(NULL, 0)
führt den Systemaufruf getcwd(path, alloc_size)
, wobei path
das Ergebnis eines vorangegangenen malloc() ist, und alloc_size
ist die Seitengröße (4096).
Um dies zu bestätigen, führen Sie ltrace -S pwd
werden Sie sowohl die Bibliotheksaufrufe als auch die Systemaufrufe sehen: Sie werden etwa Folgendes sehen
getcwd(NULL, 0 <unfinished ...>
SYS_getcwd("/root", 4096) = 6
<... getcwd resumed> ) = "/root"