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 的类型都是内置的原始类型,这些类型根据不同的平台会又不同的值, 所以需要避免程序设计中使用专门数据类型。
unix 环境高级编程 读书笔记与习题解答第四篇的更多相关文章
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- unix 环境高级编程-读书笔记与习题解答-第二篇
第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...
- unix-环境高级编程-读书笔记与习题解答-第三篇
第一章 第五节 进程与控制 该小节比较粗略的阐述了unix操作系统中用于进程控制的三个函数,分别为 : fork , exec, waitpid, 其中 exec 有五种变体, 这些变体实现的功能全部 ...
- [置顶] 文件和目录(二)--unix环境高级编程读书笔记
在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...
- [置顶] 文件io(一)--unix环境高级编程读书笔记
unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...
- unix进程的环境--unix环境高级编程读书笔记
http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937
- unix环境高级编程 读书笔记
1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!
- Unix环境高级编程学习笔记——fcntl
写这篇文正主要是为了介绍下fcntl,并将我自己在学习过程中的一些理解写下来,不一定那么官方,也有错误,希望指正,共同进步- fcntl: 一个修改一打开文件的性质的函数.基本的格式是 int fcn ...
- 《UNIX环境高级编程》笔记--UNIX标准化及实现
1.UNIX标准化 1.1.ISO C 1989 年后期,C程序设计语言的ANSI(American National Standards Institute) 标准X3. 15 9-1989得到批准 ...
随机推荐
- 402. Remove K Digits
(English version is after the code part) 这个题做起来比看起来容易,然后我也没仔细想,先速度刷完,以后再看有没有改进. 用这个来说: 1 2 4 3 2 2 1 ...
- iScroll使用
新公司比较喜欢用iScroll,而我对此一无所知,特此调研iScroll用法,写在这里方便查看 IScroll是移动页面上被使用的一款仿系统滚动插件. myScroll = new IScroll(& ...
- selenium.common.exceptions.TimeoutException: Message: Screenshot: available via screen
在使用selenium+phantomjs的时候在Windows平台下能够正常工作,在Linux下却不能,并得到错误信息: selenium.common.exceptions.TimeoutExce ...
- sql宽字节注入,绕过单引号
参加下面: http://leapar.lofter.com/post/122a03_3028a9 http://huaidan.org/archives/2268.html https://ilia ...
- String的成员方法的使用
<%@ page language="java" contentType="text/html; charset=gbk"%> <html&g ...
- JSP ---- 声明、表达式、脚本、注释
声明 在 JSP 页面中 , 可以声明一个或者多个合法的变量和方法 , 声明后的变量和方法可以在本 JSP 页面的任何位置使用 , 并将在 JSP 页面初始化时被初始化 语法格式如下 : <!% ...
- Image路径问题
BitmapImage image = new BitmapImage(new Uri("/Pictures/log.png", UriKind.Relative)); evaIm ...
- HTTPS是如何保证连接安全:每位Web开发者都应知道的
“HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题. 作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制. 它怎么保 ...
- U3D 内置对象
在U3D里面提供了一个Time对象: void OnGUI(){ Debug.Log("########################"); GUILayout.Label (& ...
- (转载)loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
原文出处:http://ajita.iteye.com/blog/1728243/ 先说明一下,本人是开发,对测试不是特别熟悉,但因工作的需要,也做过一些性能测试方面的东西.比较久之前很简单的用过,最 ...