• ubuntu 安装 man 查看函数原型


    http://hi.baidu.com/ai_shuishou/blog/item/e7be1f4d910b5ff6d72afc3f.html

    前几天看书,看到用man命令可以查看c语言库函数的函数原型,就今天试了试。可是不行。提示没有我要查找的那个条目。上网搜解决方案。原来ubuntu中man的手册默认没有装。用下面几条命令就行了:

    sudo apt-get install manpages 
    sudo apt-get install manpages-de 
    sudo apt-get install manpages-de-dev 
    sudo apt-get install manpages-dev

    另附上一篇从他人处copy来的文章:

    ubuntu man手册完善

    Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。
    Linux 的man手册共有以下几个章节:

    1、Standard commands (标准命令)
    2、System calls (系统调用)
    3、Library functions (库函数)
    4、Special devices (设备说明)
    5、File formats (文件格式)
    6、Games and toys (游戏和娱乐)
    7、Miscellaneous (杂项)
    8、Administrative Commands (管理员命令)


    例如:我们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输入“man ifconfig”它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。

    man是按照手册的章节号的顺序进行搜索的,比如:

    man sleep

    只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:

    man 3 sleep

    ubuntu默认是没有安装c语言的库函数man手册的

    1.添加库函数手册 
    ubuntu默认是没有安装c语言的库函数man手册的,所以你在man perror 和sendto之类的函数时会显示没有相关文档的问题,这个问题让我郁闷了我好久。解决方法:
    sudo apt-get install manpages-dev 
    2.让man显示中文 
    ubuntu源里面已经包含了中文的man包,所以不用从其他地方down了,直接
    sudo apt-get install manpages-zh 
    但是这样man默认显示的还不是中文,还需要以下两步
    a.把中文man包转换成utf8格式的 
    新建一个脚本文件
    gedit t.sh
    把下面内容添加进去
    #!/bin/bashcd /usr/share/man/zh_CN/for k in *docd $kfor i in *.gzdo j=`echo ${i%.gz}` gunzip $i iconv -f gb18030 -t utf8 $j >tmp mv tmp $j gzip $jdonecd ..done
    然后
    sudo ./t
    b.修改man默认的语言 
    sudo gedit /etc/manpath.config 把里面的所有的 /usr/share/man 改成 /usr/share/man/zh_CN
    保存后退出,然后你再试一下man ls
    3.让没有中文帮助的显示英文 
    做完上面第二部还不够,这时你再man 一下一些c语言函数(不要用printf,socket之类比较有名的函数,这些已经有中文帮助了)的时候就会发现竟然没有帮助,而刚才明明在第一步已经安装了啊。这是因为你上面 把/usr/share/man 改成 /usr/share/man/zh_CN的操作使man只在中文帮助中搜索,如果没有就直接放弃,因此还需要以下操作,才能让man在没有中文帮助的时候自动显示英文的帮助,如果英文的也没有,哪就真的没有了。
    sudo gedit /etc/manpath.config
    然后搜索你刚才改过的地方,然后在其后面添加同样的一行,只是后面的目录还用原来的/usr/share/man,比如在修改后的
    MANPATH_MAP /bin          /usr/share/man/zh_CN
    再添加一行
    MANPATH_MAP /bin          /usr/share/man

    【下面是另一种方法】

    今天想看一下系统函数如usleep的函数体,却发现怎么也找不到,先用man查看该函数的原型和所在头文件,使用如下代码:man 3 usleep 得知该函数定义在unistd.h文件中,用locate命令找到这个文件的位置,打开发现只有一个包含asm/unistd.h的语句,接着打开asm/unistd.h又发现根据系统类型选择包含asm/unistd_32.h或asm/unistd_64.h,再打开unistd_32.h,搜索usleep却什么都找不到,别说函数体了,连函数声明都没有,有点儿小郁闷。 第一个方法行不通,就换第二个方法:去linux内核源码中搜索,先下载linux内核源码,用如下命令:apt-get install linux-source-2.6.24 下载完后是个tar.bz2压缩文件,在/usr/src目录中,解压到当前目录就行,解压后建立一个符号链接linux-source指向linux-source-2.6.24,然后用cscope搜索usleep函数符号或全局定义,步骤如下:

    1. 先把下面的代码复制粘贴为文件保存到linux-source文件夹中,文件名随意,假设为:linux_source_cscope.sh
      #导出CSCOPE_DB变量
      if [ ! -e /usr/src/linux-source/cscope.out ]
      then
          cd /
          find /usr/src/linux-source-2.6.24/ -name '*.c' -o -name '*.h' > /usr/src/linux-source/cscope.files
          cd /usr/src/linux-source/
          cscope -b
      fi
      CSCOPE_DB=/usr/src/linux-source/cscope.out
      export CSCOPE_DB
    2. 进入linux-source,执行如下代码: source linux_source_cscope.sh
    3. 启动cscope(如果没装的需要安装),先查找全局定义,没有找到,再查找符号,得到如下结果: C symbol: usleep File Function Line 0 macfb.c civic_setpalette 447 usleep(10); 1 unistd.h ualarm 420 extern int usleep (__useconds_t __useconds); 第一个明显不是,进入第二个发现只是一个函数声明,没有函数体。

    第二种方法也找不到库函数的函数体,心情无比郁闷,就去论坛上发了个帖子,没有结果,不过HuntXu倒是给了点儿提示:因为编译成库了...你只是调用库而已...。晚上在网上搜的时候有人说在libc里库函数就定义在它的同名文件中,比如usleep就定义在usleep.c中,受此启发,就搜索usleep.c文件,结果是我的系统里没有,Linux源码里也没有,我装的nios2-linux开发包里的uClibc目录里倒是有,呵呵,现在问题明朗化了,去下载glibc的源码,用如下命令:apt-get install glibc-source 下载完后在/usr/src/glibc/目录中,也是压缩文件,有好几个,我只解压了最基本的glibc-2.7.tar.bz2,解压后运行sudo updatedb更新数据库,再搜索就发现usleep.c文件了,结果如下:/usr/src/glibc-2.7/misc/usleep.c /usr/src/glibc-2.7/sysdeps/mach/usleep.c /usr/src/glibc-2.7/sysdeps/unix/bsd/usleep.c /usr/src/glibc-2.7/sysdeps/unix/sysv/linux/usleep.c 随便找一个打开就可以看到函数定义了,虽然还是调用了系统调用,但总算是可以初窥门道了。

  • 相关阅读:
    Android网络项目课程笔记-----系统设置_首选项框架&Holo风格的设置
    Android网络项目课程笔记-----加载数据
    Android网络项目课程笔记-----代码复用性
    Android网络项目课程笔记-----AdapterView嵌套
    Android网络项目课程笔记-----滑动Banner
    Android网络项目课程笔记-----滑动Tab&Banner
    Android网络项目课程笔记-----页面结构
    Android网络项目课程笔记-----欢迎页面新手引导
    C#调用SAP S4/HANA Gateway Service
    CefSharp试用
  • 原文地址:https://www.cnblogs.com/playerboy/p/3109872.html
Copyright © 2020-2023  润新知