免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1230 | 回复: 0
打印 上一主题 下一主题

完全认识GNU C 语言库glibc [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-12 15:42 |只看该作者 |倒序浏览

               
1、C语言库是用来干什么的?
编程人员所提到的库,其英文是library,到底是什么呢?简单说就是一些通用的程序代码被生成文件存储起来
了,以后任何人写程序时如果需要用到这些通用代码只需要调用库函数接口就可以了。比如我们C程序里通常用的printf函数,就是用来将程序里的信息输出
到屏幕上的。如果要求每个写程序的人都自己来写个函数去调用内核接口实现屏幕输出,那将是极大的浪费,所以前人已经写好这个函数相关的库了,在我们
Linux系统中,这个库是GNU
C语言库glibc,就是这个文件/usr/lib/libc.so。当然,如果要使用一个库文件,首先得有个头文件来定义库文件里的每个函数,比如
/usr/include/stdio.h,我们写程序时,只需要#include 就可以用printf来向屏幕输出信息了。
后面我们讲到如何自己生成库文件时,大家一定会相当明白,现在先知道库的基础知识吧。
2、如何获得库和手册
首先,搜索到库文件,在Ubuntu和Debian系列的Linux系统中,我用这个命令就可以:
   
        
            apt-cache search GNU c library
            
        
   
此命令输出部分如下:
   
        
            glibc-doc-reference - GNU C Library: Documentation
            libc6 - GNU C Library: Shared libraries
            libc6-amd64 - GNU C Library: 64bit Shared libraries for AMD64
            libc6-dbg - GNU C Library: Libraries with debugging symbols
            libc6-dev - GNU C Library: Development Libraries and Header Files
            libc6-dev-amd64 - GNU C Library: 64bit Development Libraries for AMD64
            libc6-i686 - GNU C Library: Shared libraries [i686 optimized]
            libc6-pic - GNU C Library: PIC archive library
            libc6-prof - GNU C Library: Profiling Libraries
            libc6-xen - GNU C Library: Shared libraries [Xen version]
            
        
   
或者你可以搜索libc或glibc
因为我们要编程序,即进行开发,所以我们得安装libc6-dev这个软件包。
用这个命令查看一下这个软件包的具体信息:
   
        
            apt-cache show libc6-dev
            
        
   
此命令输出的部分如下:
   
        
            Description: GNU C Library: Development Libraries and Header Files
            Contains the symlinks, headers, and object files needed to compile
            and link programs which use the standard C library.
            
        
   
然后就可以运行命令安装此软件包:
   
        
            apt-get install libc6-dev
            
        
   
安装完成后可以查看一下这个软件包提供了一些什么,用下面这个命令:
   
        
            dpkg -L libc6-dev
            
        
   
此命令输出如下,即安装此软件包后,系统中多了如下这些文件:
   
        
             由于这里只允许上传图片和音乐文件,所以用另一个页面来存储这些文本信息了
            
        
   
dpkg -L libc6-dev命令的所有输出内容在这里
显然,在/usr/bin
目录下的是一些工具命令,用来辅助我们编程或调试程序的。/usr/lib目录下是一些库文件,我们编写程序时直接调用这些库文件提供的函数就可以完成很
多工作了。在/usr/include目录下的就是头文件,在编程序时要include进来才可以用库提供的函数。而在/usr/share/man目录
下的是在线手册,比如上面有个文件是/usr/share/man/man1/gencat.1.gz,那么我们可以通过man
gencat查看到关于gencat相关的手册。而在/usr/share/doc/目录下的就是这个软件所带的相关文档,建议在使用软件包之前看一下这
里面的一些文档,相当于是我们的自学教材的。当然,只安装libc6-dev这一个软件包可能没有什么详细的资料给你,如果把下面这几个软件包也安装上可
能资料就相当全了。
   
        
            glibc-doc-reference - GNU C Library: Documentation
            manpages-dev - Manual pages about using GNU/Linux for development
            glibc-doc - GNU C Library: Documentation
            
        
   
glibc-doc-reference这是我们的glibc参考手册,就象世面上可能会看到的某些书<X编程参考>
manpages-dev是man手册,安装上这个软件包之后,你就可以通过man printf直接来看这个函数的用法。
glibc-doc是文档。
安装完这几个软件后,可以用dpkg -L命令分别查看一下这几个软件包所提供的内容。
比如glibc-doc这个软件包提供的内容如下:
dpkg -L glibc-doc命令的所有输出内容在这里
而manpages-dev软件包提供的文件如下:
dpkg -L manpages-dev命令的所有输出内容在这里
3、如何从手册中自我学习
首先,我相信在glibc-doc软件包提供的内容里有这些东西你一定看到了:
   
        
            /usr/share/doc/glibc-doc/html
            /usr/share/doc/glibc-doc/html/libc.html
            /usr/share/doc/glibc-doc/html/libc_1.html
            /usr/share/doc/glibc-doc/html/libc_2.html
            /usr/share/doc/glibc-doc/html/libc_3.html
            /usr/share/doc/glibc-doc/html/libc_4.html
            /usr/share/doc/glibc-doc/html/libc_5.html
            /usr/share/doc/glibc-doc/html/libc_6.html
            /usr/share/doc/glibc-doc/html/libc_7.html
            /usr/share/doc/glibc-doc/html/libc_8.html
            /usr/share/doc/glibc-doc/html/libc_abt.html
            /usr/share/doc/glibc-doc/html/libc_ovr.html
            /usr/share/doc/glibc-doc/html/libc_toc.html
            
        
   
很显然,这是html网页式的libc文档,赶紧打开一个浏览器打开/usr/share/doc/glibc-doc/html/libc_toc.html来看吧,相信把这几个文档看完之后你对libc有一些了解了。
其次,在glibc-doc和manpages-dev两个软件包里提供了一些/usr/share/man目录下的文件。这就是man命令可以看到的内容了。
比如:你可能看到了/usr/share/man/man2/chmod.2.gz,说明在man手册的第2章有个chmod的帮助手册。输入下面的命令看看这个chmod如何编程使用吧:
man 2 chmod
通过这个man手册你就知道如何自己编写一个程序来调用函数chmod实现修改文件属性的工作了。
又比如:你可能看到/usr/share/man/man3/abs.3.gz,说明在man手册的第3章有个abs的帮助手册可以看。输入下面的命令你就知道如何在程序里求一个数的绝对值了:
man 3 abs
相信你把这些软件包提供的所有内容都掌握的时候已经是相当高手的了。
/************关于本文档********************************************
*filename: 我是这样学习Linux下C语言编程的-完全认识GNU C 语言库glibc
*purpose: 说明怎样利用glibc开始Linux下C语言编程
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2007-02-05 13:06
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to:Google
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
* 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!
*********************************************************************/
4、看到man手册后如何编程?
可能有人会问了,其实相当简单,照着man手册说的写到程序里就行了。
比如man 3 abs时看到:
   
        
            NAME
                    abs, labs, llabs, imaxabs - compute the absolute value of an integer
            
            SYNOPSIS
                    #include
            
                    int abs(int j);
                    long int labs(long int j);
                    long long int llabs(long long int j);
            
                    #include
            
                    intmax_t imaxabs(intmax_t j);
            
            DESCRIPTION
       The abs() function computes the absolute value of the integer
argument j. The labs(), llabs() and imaxabs() functions compute the
                    absolute value of the argument j of the appropriate integer type for the function.
            
            RETURN VALUE
                    Returns the absolute value of the integer argument, of the appropriate integer type for the function.
            
        
   
这里说得很清楚,abs函数就是用来返回数值j的绝对值的。
我们就可以写这样一个程序了:
   
        
            #include  /* 把上面的复制下来而已 */
            #include  /* 因为我们要向屏幕输出信息用到printf函数,man 3 printf会知道需要这个头文件 */
            int main(int argc, char ** argv)
            {
                 int x, y;
                 x = -321;
                 y = abs(x);
                 printf("abs(x)=%d\n", y);
                 return 0;
            }
        
   
用gcc编译程序吧:
gcc abs.c
运行程序:
./a.out
此程序将计算出x变量的绝对值输出到屏幕。
又比如:man 3 sin可能会看到:
   
        
            NAME
                    sin, sinf, sinl - sine function
            
            SYNOPSIS
                    #include
            
                    double sin(double x);
                    float sinf(float x);
                    long double sinl(long double x);
            
                    Link with -lm.
            
            DESCRIPTION
                    The sin() function returns the sine of x, where x is given in radians.
            
            RETURN VALUE
                    The sin() function returns a value between -1 and 1.
            
        
   
同样照着做吧:
   
        
            #include  /* 把上面的复制下来而已 */
            #include  /* 因为我们要向屏幕输出信息用到printf函数,man 3 printf会知道需要这个头文件 */
            int main(int argc, char ** argv)
            {
                 double x, y;
                 x = 60;
                 y = sin(x);
                 printf("sin(x)=%.2f\n", y);
                 return 0;
            }
            
        
   
编译程序用下列命令:
gcc sin.c -lm
注意这里比上面的编译命令多了一个-lm,我怎么知道的?上面man手册告诉我的:“Link with -lm.”因为我们用到了数学库/usr/lib/libm.so,所以要加上-lm来引用这个库文件。
运行程序吧:
./a.out
[转载]   http://hi.baidu.com/%B3%C2%C0%CB%CF%C9/blog/item/d605d62a72d81d2cd52af11a.html
此程序将输出弧度为60度的正弦值。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/75758/showart_1121273.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP