No Solaris:
nomebase.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
saída:
libc.so.1 => /lib/libc.so.1
libm.so.1
......
No Linux:
nomebase.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
saída:
libc.so.6 => /lib/libc.so.6
......
O Solaris libc é baseado no GNU libc? No Solaris é libc.so.1
igual ao libc.so.6
Linux?
Responder1
A biblioteca Solaris C não é baseada na biblioteca GNU C. Ambos implementam o padrão C e interfaces POSIX e alguns outros padrões, mas não compartilham uma herança comum além disso.
Solaris libc.so.1 traça sua história até a biblioteca AT&T System VC.
GNU libc.so.6 é baseado em glibc 2.0 ou superior. As versões anteriores (por exemplo, libc.so.5) da biblioteca Linux C eram um fork de uma versão anterior da glibc 1.x.
Você descobrirá que há algumas diferenças entre as duas bibliotecas. Por exemplo, Solaris libc contém algumas operações de string que a glibc não contém, strlcpy()
sendo as mais óbvias para mim.
Nota adicional(mais de uma década depois): strlcpy()
e strlcat()
estão chegandoglibc2.38
Responder2
Por que? Porque ambos se autodenominam libc
?
Não.
Ambos são chamados libc
porque GNU libc tenta ser um substituto compatível para libc em Unices proprietários. Isso éa razão pela qual a licença LGPL foi criada.
Uma rápida pesquisa na web mostra alguns doscódigo fonte para Solaris libc. Escolhendoum arquivoaleatoriamente, as mensagens de direitos autorais dizem
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
então deve ser bastante óbvio que o código não vem do GNU.
Responder3
Solaris libc não é baseado no GNU libc, mas fornece interfaces semelhantes.