第一章 第六节

第一小节

这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识。

unistd.h 该文件包含了unix操作系统中的各种原始数据类型和原型函数, 我的系统是osx 10.0.5, 该文件通常位于操作系统的 /usr/include 目录下,打开该文件,我们会发现很多预定义信息。

ssize_t	 read(int, void *, size_t) __DARWIN_ALIAS_C(read);
pid_t getpid(void);
ssize_t write(int, const void *, size_t) __DARWIN_ALIAS_C(write);

如上之类的系统原型函数都在该文件中定义,并且为了避免使用依赖于特定计算机的专门数据类型, ssize_t, pid_t, 之类的数据类型,都定义在 sys/ctypes.h 中, 在我的系统中,这些原始数据类型全部定义与:

/usr/include/sys/_types/
-r--r--r-- 1 root wheel 1413 9 19 23:45 _off_t.h
-r--r--r-- 1 root wheel 1537 9 19 23:45 _os_inline.h
-r--r--r-- 1 root wheel 1420 9 19 23:45 _pid_t.h
-r--r--r-- 1 root wheel 1430 9 19 23:45 _posix_vdisable.h
-r--r--r-- 1 root wheel 1458 9 19 23:45 _pthread_attr_t.h
-r--r--r-- 1 root wheel 1455 9 19 23:45 _pthread_cond_t.h

中,_size_t.h 头文件中定义了__ssize_t__的数据类型, 其他的数据类型可以根据文件名判断出来, 在我的系统中 ssize_t 类型被定义为了

#ifndef _SIZE_T
#define _SIZE_T
typedef __darwin_size_t size_t;
#endif /* _SIZE_T */

第二小节

该小节介绍了 ANSI标准中关于 void * 应用, 在非ANSI   标准的C程序当中, 会有使用 char * 来表示通用指针类型,在ANSI中,则全部使用void * , void和void*的讨论可以参考 这篇文章 , 不过我会按照自己的理解说明一下

void* 字面上是空指针,在实际使用的时候可以当作“范型”指针来使用,就是任何指针都可以指向他, 而他进行强制转换运算后, 可以随意使用, 这种情况就很适合 malloc, read, write 这样的函数来使用,因为我们如果不使用void * 就必须为每一种数据类型写一个read, 这里就体现出了范型的好处了, void则是一个语义上的“空” , 经常用来占位, C中,函数不需要参数和返回的时候都需要这样用void来修饰。

第三小节

书中在这里使用一个段落阐述了unix操作系统中的原始数据类型,大多数结尾是 _t 的类型都是内置的原始类型,这些类型根据不同的平台会又不同的值, 所以需要避免程序设计中使用专门数据类型。

unix 环境高级编程 读书笔记与习题解答第四篇的更多相关文章

  1. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  2. unix 环境高级编程-读书笔记与习题解答-第二篇

    第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...

  3. unix-环境高级编程-读书笔记与习题解答-第三篇

    第一章 第五节 进程与控制 该小节比较粗略的阐述了unix操作系统中用于进程控制的三个函数,分别为 : fork , exec, waitpid, 其中 exec 有五种变体, 这些变体实现的功能全部 ...

  4. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  5. [置顶] 文件io(一)--unix环境高级编程读书笔记

    unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...

  6. unix进程的环境--unix环境高级编程读书笔记

    http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937

  7. unix环境高级编程 读书笔记

    1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!

  8. Unix环境高级编程学习笔记——fcntl

    写这篇文正主要是为了介绍下fcntl,并将我自己在学习过程中的一些理解写下来,不一定那么官方,也有错误,希望指正,共同进步- fcntl: 一个修改一打开文件的性质的函数.基本的格式是 int fcn ...

  9. 《UNIX环境高级编程》笔记--UNIX标准化及实现

    1.UNIX标准化 1.1.ISO C 1989 年后期,C程序设计语言的ANSI(American National Standards Institute) 标准X3. 15 9-1989得到批准 ...

随机推荐

  1. CentOS让root用户可以SSH登录

    一.说明     Solaris 10 出于安全原因,默认参数很严格,禁止root用户直接使用ssh登陆 二.处理     1.可以先用非root的帐户,登陆到ssh后,su成root     2.如 ...

  2. thinkphp I方法取传参

    /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post.name','','h ...

  3. 如何注册dll、ocx控件

    在程序集成时,有时需要对厂家提供的dll或者ocx控件进行注册.其一般操作为:开始>命令指示符(右击管理员身份运行)>regsvr32 文件路径. 比如对devocx.ocx进行注册,在F ...

  4. 【JAVA - 基础】之数据加密和解密

    1.Base64工具类(可逆): import java.util.HashMap; import java.util.Map; /** * Base64加解密算法 * </p> * Ba ...

  5. 【Android - V】之Toolbar的使用

    Toolbar是Android V7包中的一个控件,用来代替Action Bar作为界面的头部标题栏布局.Toolbar相对于Action Bar的特点是更加灵活,可以显示在任何位置. 首先先来看To ...

  6. 使用PullToRefresh实现下拉刷新和上拉加载

    使用PullToRefresh实现下拉刷新和上拉加载 分类: Android2013-12-20 15:51 78158人阅读 评论(91) 收藏 举报 Android下拉刷新上拉加载PullToRe ...

  7. 开启MYSQL远程连接权限

      开启MYSQL远程连接权限   1 2 3 4 5 //建议设置固定IP mysql> GRANT ALL PRIVILEGES ON *.* TO root@"8.8.8.8&q ...

  8. anzhaung

    http://search.newhua.com/search_list.php?searchsid=1&searchname=Setu

  9. iOS开发--通过MultipeerConnectivity完成蓝牙通讯

    iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...

  10. TCP/IP协议原理与应用笔记13:底层网络技术之传输介质

    1. 有线介质----导线管(导向媒体) • 双绞线 Twisted-pair cable • 同轴电缆 Coaxial cable 金属铜导线,电流 • 光纤 Fiber-optic cable   ...