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 に基づいていますか? Solaris ではLinuxlibc.so.1
と同じですか?libc.so.6
答え1
Solaris C ライブラリは GNU C ライブラリに基づいていません。どちらも C 標準、POSIX インターフェース、およびその他の標準を実装していますが、それ以外に共通する遺産はありません。
Solaris libc.so.1 の歴史は AT&T System VC ライブラリに遡ります。
GNU libc.so.6 は glibc 2.0 以降に基づいています。Linux C ライブラリの以前のバージョン (例: libc.so.5) は、以前の glibc 1.x リリースからフォークしたものです。
2 つのライブラリにはいくつかの違いがあることに気づくでしょう。たとえば、Solaris libc には glibc にはないいくつかの文字列操作が含まれており、strlcpy()
これが私にとって最も明白です。
追加メモ(10年以上後):strlcpy()
そしてstrlcat()
glibc2.38 より
答え2
なぜですか? どちらも自分たちを と呼んでいるからですlibc
。
いいえ。
これら両方が呼ばれるlibc
のは、GNU libcがプロプライエタリなUnix上のlibcの互換性のある代替品となることを目指しているからです。これは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 に基づいているわけではありませんが、同様のインターフェースを提供します。