На Solaris:
базовое имя.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
выход:
libc.so.1 => /lib/libc.so.1
libm.so.1
......
В Linux:
базовое имя.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
выход:
libc.so.6 => /lib/libc.so.6
......
Основана ли Solaris libc на GNU libc? libc.so.1
В Solaris то же самое, что и libc.so.6
в Linux?
решение1
Библиотека Solaris C не основана на библиотеке GNU C. Они обе реализуют стандарт C и интерфейсы POSIX, а также некоторые другие стандарты, но за пределами этого общего наследия у них нет.
Библиотека Solaris libc.so.1 берет свое начало в библиотеке AT&T System VC.
GNU libc.so.6 основан на glibc 2.0 или выше. Более ранние версии (например, libc.so.5) библиотеки Linux C были ответвлением более раннего выпуска glibc 1.x.
Вы обнаружите, что между этими двумя библиотеками есть некоторые различия. Например, Solaris libc содержит некоторые строковые операции, которых нет в glibc, и strlcpy()
это наиболее очевидно для меня.
Дополнительное примечание(более десяти лет спустя): strlcpy()
и strlcat()
приближаются кглибк 2.38
решение2
Почему? Потому что они оба называют себя libc
?
Нет.
Они оба называются так, libc
потому что GNU libc пытается быть совместимой заменой libc на проприетарных Unix-системах. Этопричина создания лицензии LGPL.
Быстрый поиск в Интернете показывает некоторые изисходный код для Solaris libc. Сборфайлнаугад, сообщения об авторских правах там говорят
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
поэтому должно быть совершенно очевидно, что код не из GNU.
решение3
Библиотека Solaris libc вовсе не основана на GNU libc, но они предоставляют похожие интерфейсы.