burada the manual gerekçe:dirname() in C: el ile yanlış mı?
fonksiyonları dirname() ve basename() dizin ve dosya adı bileşenlerine boş sonlandırılmış yol adı dizesini bölünürler. Her zamanki gibi durumunda, dirname(), en son '/' 'a kadar olan diziyi döndürür, ancak basename() son'/'öğesinin ardından bileşeni döndürür. Trailing '/' karakterleri, yol adının bir parçası olarak sayılmaz.
Ve daha sonra, bu küçük tablo vardır:
path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr" // wat?
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
Neden dirname("/usr/")
"/"
değil "/usr"
dönüyor?
El kitabındaki cümle sonuç olarak /usr
almam gerektiğini söyledi.
Gerçek sonucu bir kukla programda test ettim ve elkitabında olduğu gibi davranıyor.
#include <libgen.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
const char *mydir="/usr/";
char *dummy = strdup(mydir);
char *dummy2 = strdup(mydir);
char *dname = dirname(dummy);
char *bname = basename(dummy2);
printf("mydir: '%s', dname: '%s', bname: '%s'\n", mydir, dname, bname);
free(dummy);
free(dummy2);
return 0;
}
$ ./test
mydir: '/usr/', dname: '/', bname: 'usr'
Şimdi, olurdu ne beklenir:
path dirname basename
"/usr/" "/usr" "" // more consistent?
Yani .. Herkes anladığı burada neler oluyor?
+1 anahtar noktanız var ve alıntıladı. FYI da ilgili bir sorun için bir Austin Grubu yorumlama var # 612: http://austingroupbugs.net/view.php?id=612 –