Linux高级程序设计第三版 第一章

第一章Linux下C语言开发环境 学习笔记

1.2开发初步

1.2.1 Linux下C程序标准

ANSI C标准
POSIX标准

1.2.2 库函数和系统调用

  • 库函数
    用已完成常见的特定功能,可以应用于不同的平台而不需要做任何修改即具有极好的移植性。例如C函数库能够被绝大多数C编译器支持。
  • 系统调用函数
    一般与操作系统相关,不同的操作系统所使用的系统调用可能不同。一般来说如果两个操作系统差异很大,系统调用的可移植性不高。

3. glibc函数库
GNU的C函数库glibc是Linux最重要的函数库,它定义了ISO C标准指定的所有库函数,以及由POSIX 或其他UNIX操作系统变种制定的附加特色,还包括与GNU系统相关的扩展。
目前Linux系统大多使用glibc2.3以上的版本。
4.系统调用
系统调用是操作系统提供给外部程序的接口。在C语言中,操作系统的系统调用一般通过函数调用的形式完成。因为这些函数等装了系统调用的细节,将系统调用的入口、参数以及返回值用C语言的函数调用过程实现。

  • 在Linux系统中,系统调用函数定义在glibc中。

系统调用需要注意以下几点:

(1)调用函数成功返回0值,不成功返回非零值。检查错误原因,要判断errno的值
(2)许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递缓冲区地址,返回的数据保存在缓冲区中。
(3)不能认为系统调用函数比其他函数的执行效率高。系统调用是一个非常耗时的过程。

1.2.3 在线文档

  1. man手册
  2. info手册
  3. HOW-TO

1.2.4获取错误信息

errno.h
打印错误信息:perror函数

1.3 部分常用工具

1.3.1 tar打包器

在Shell命令行下,可以使用的文件压缩工具有:gzip 、bzip2和zip
tar类型的文件是几个文件或目录在一个文件中的集合。用来创建备份和归档。tar使用的选项是有一下几项。

  • -c
  • -x
  • -j
  • -z
  • -f
  • -t
  • -v

1.3.2常用命令及工具

  1. expand 用于将输入制表符转换为空格,unexpand将输入空格转换为制表符。
  2. grep搜索字符串
    用来在指定文件中搜索关键字符串
  3. find查找文件
    用于使用多种方式来查找某一文件的位置。
  4. AWK工具
    用于处理文本的编程语言工具。
  5. sort命令
    按照字母次序打印命令行上指定的文件内容,也接受用管道传送的输入。
  6. 其他命令
    (1)nl命令用于为输出的每一行添加行号
    (2)wc命令用于打印指定文件或输入流 《来自管道)中的行、字和字节的数量。
    (3)head 命令用于打印文件或流的前十行。使用-n选项来指定应显示的行数。
    (4)tail 命会用于打印文件或流的最后十行。使用-n选项指定应显示的行数。
    (5) tac 与 cat 类似,但它以逆向顺序打印所有行,即先打印最后一行。
    (6)paste 命会用于获取两个或更多文件作为输入,连接输入文件上的每个后续行,并输出结果行。它对于创建文本的表或列是很有用的。
    (7)od命令用于将输入流转换为八进制或十六进制的 “转储”格式。
  7. 常用键盘组合键命令
  • ^C:<ctrl-c>中断程序
  • ctrl-\ :退出程序
  • ctrl-S:结束程序
  • ctrl-Z:挂起程序

1.4Linux下编码风格

1.4.1 GNU编码规范

  • 函数开头的函数开头的左花括号放到最左边,避免把任何其他的左花括号、左括号或者左方招
    号放到最左边。
  • 尽力避免让两个不同优先级的操作符出现在相同的对齐方式中。
  • 每个程序开头都应该有一段简短的说明其功能的注释。例如GNU emacs 上面的代码中的注释。
  • 每个函数都加上注释,以说明函数做了些什么,需要哪些种类的参数,参数可能值的含义以及用途。
  • 不要跨行声明多个变量。在每一行中都以一个新的声明开头。
  • 要在同一个声明中同时说明结构标识和变量,或者结构标识和类型定义(typedef)尽量避免在 f的条件中进行赋值。
  • 当在一个if语句中嵌套了另一个 if-else 语句时,应用花括号把if-else 括起来。
  • 在名字中使用下划线以分隔单词,尽量使用小写;在宏或者枚举中通常使用大写常量
  • 使用一个命令行选项时,给出的变量应该在选项含义的说明之后,而不是选项字符之后。
    除了 vim 和 emacs 以外,还有indent工具可以帮程序员美化 C/C++源代码。
    下面用这条命令可将 Liux 内核编程风格的程序 quan.c 转变为 GNU 编程风格。
[root@localhost~] #$ indent -gnu quan.c

1.4.2Linux内核编码规范

Linux 内核代码具有如下风格:

  • 缩进采用 tab 制表符。
  • 在 if 或者 for 循环中,将开始的大括号放在一行的最后,而将结束大括号放在本段语句结束行的第一位,函数中的大括号除外。
  • 变量命名尽量使用简短的名字,简写或者单词间采用了_隔开,比如代码中的sys_cfg_data。
  • 函数最好短小精悍,一个函数最好只做一件事情,而且函数中的变量一般不超过 10个,大小一般都小于 80 行。
  • 一个模块的注释一般注明了作者、版权、注释说明代码的功能,而不是说明其实现原理,这也和 Linux 的文化有关。

以上是 GNU 编码风格和 Linux 内核编码风格,两种风格体现着两种不同的文化精神,有些地方相似,有些地方迥然不同,。读者可以根据个人情况选择其中一种编码规范来编写自己的程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值