zoukankan      html  css  js  c++  java
  • unix 环境高级编程 读书笔记与习题解答第四篇

    第一章 第六节

    第一小节

    这一章没有程序设计和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 的类型都是内置的原始类型,这些类型根据不同的平台会又不同的值, 所以需要避免程序设计中使用专门数据类型。

  • 相关阅读:
    成为JAVA(高级)工程师
    JVM的内存区域划分以及垃圾回收机制
    XML
    String.valueOf
    JAVA书籍(2)
    JAVA书籍(1)
    深入JAVA线程池
    FileWriter与BufferedWriter
    获取下拉框的文本或值
    删除字符串最后一个字符的几种方法
  • 原文地址:https://www.cnblogs.com/youngershen/p/4041795.html
Copyright © 2011-2022 走看看