Solarisの場合:
#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の場合:
#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
......
SolarislibcはGNU libcに基づいていますか?Solarisのlibc.so.1
はLinuxのlibc.so.6
と同じですか?
SolarisCライブラリはGNU Cライブラリに基づいていません。どちらもC標準とPOSIXインターフェイス、およびその他のいくつかの標準を実装していますが、それ以上の共通の遺産を共有していません。
Solaris libc.so.1は、その履歴をAT&T System VCライブラリにトレースします。
GNU libc.so.6は、glibc2.0以降に基づいています。 Linux Cライブラリの以前のバージョン(libc.so.5など)は、以前のglibc1.xリリースのフォークでした。
2つのライブラリにはいくつかの違いがあることがわかります。たとえば、Solaris libcには、glibcにはない文字列操作がいくつか含まれていますが、strlcpy()が最も明白です。
SolarislibcはGNU libcにまったく基づいていませんが、同様のインターフェースを提供します。
どうして?どちらも自分自身をlibc
と呼んでいるからですか?
番号。
GNU libcはプロプライエタリUnices上のlibcの互換性のある代替品になろうとしているため、どちらもlibc
と呼ばれます。これは LGPLライセンスが作成された理由 =。
簡単なWeb検索では、 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からのものではないことは明らかです。