Unter Solaris:
Basisname.c
#include <stdio.h>
#include <libgen.h>
int main(int argc, char* argv[])
{
int len = strlen(argv[0]);
char *bsname = basename(argv[0]);
printf("%s\n", bsname);
printf("%d\n", len);
return 0;
}
cc basename.c
ldd a.out
Ausgabe:
libc.so.1 => /lib/libc.so.1
libm.so.1
......
Unter Linux:
Basisname.c
#include <stdio.h>
#include <libgen.h>
int main(int argc, char* argv[])
{
int len = strlen(argv[0]);
char *bsname = basename(argv[0]);
printf("%s\n", bsname);
printf("%d\n", len);
return 0;
}
gcc basename.c
ldd a.out
Ausgabe:
libc.so.6 => /lib/libc.so.6
......
Basiert die Solaris-Libc auf der GNU-Libc? Ist sie libc.so.1
unter Solaris dasselbe wie libc.so.6
unter Linux?
Antwort1
Die Solaris C-Bibliothek basiert nicht auf der GNU C-Bibliothek. Beide implementieren den C-Standard und POSIX-Schnittstellen sowie einige andere Standards, haben darüber hinaus aber keine gemeinsame Grundlage.
Die Geschichte der Solaris libc.so.1 geht auf die VC-Bibliothek des AT&T-Systems zurück.
GNU libc.so.6 basiert auf glibc 2.0 oder höher. Die früheren Versionen (z. B. libc.so.5) der Linux C-Bibliothek waren ein Fork einer früheren glibc 1.x-Version.
Sie werden feststellen, dass es zwischen den beiden Bibliotheken einige Unterschiede gibt. Solaris libc enthält beispielsweise einige String-Operationen, die glibc nicht hat. Das strlcpy()
ist für mich das Offensichtlichste.
Zusätzliche Anmerkung(über ein Jahrzehnt später): strlcpy()
und strlcat()
kommen zuglibc 2.38
Antwort2
Warum? Weil sie sich beide so nennen libc
?
NEIN.
Sie werden beide aufgerufen, libc
weil GNU libc versucht, ein kompatibler Ersatz für libc auf proprietären Unices zu sein. Dies istder Grund für die Erstellung der LGPL-Lizenz.
Eine schnelle Websuche zeigt einige derQuellcode für Solaris libcKommissionierungeine Dateizufällig, die Copyright-Meldungen dort sagen
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
Es sollte also ziemlich offensichtlich sein, dass der Code nicht von GNU stammt.
Antwort3
Solaris libc basiert überhaupt nicht auf GNU libc, aber sie bieten ähnliche Schnittstellen.