摘要:前言 本文介绍使用无缓冲IO函数进行文件读写。 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的。读写步骤 1. 打开文件 open 函数 2. 读写文件 read write 函数 3. ( 如果需要 )修改文件指针 lseek 函数 ( 可能和 2 交替进行 ) 4. 关闭文件 close 函数代码示例 1 // 2 // 本程序往一个文件中写入一个整型数组 3 // 然后读取这个数组并输出 4 // 5 6 #include 7 #include 8 #include 9 #include 10 #include...
阅读全文
摘要:前言 前篇文章解释了限制值的五种类型以及获取它们的方法。但是对于其中可能不确定的类型( 45类型 ),当限制值获取函数返回-1的时候,我们无法仅通过这个函数返回值-1来判断是限制值获取失败还是限制值是不确定的,因为这两种情况函数的返回值均为-1。这样就给编程带来了不变。本文将教你如何获取到未确定类型的限制值的真正情况。解决思路 可以在调用限制值获取函数之前,先将errno变量置为0。调用之后,如果函数返回-1,那么有两种情况:1. errno依然为0,这表示该限制值是不确定的。2. errno不为0,这表示限制值获取出错了;如果函数返回的数不是-1,那说明该限制值是确定的并已作为函数返回值..
阅读全文
摘要:前言 在POSIX标准中,定义了许多限制。这些限制大约分为五类,不同类型的限制获取的方式不一样。限制值分类 1. 不变的最小值 这类型的限制值是静态的,固定的。 2. 不变值 同上 3. 运行时可以增加的值 这类型的限制值在程序运行时会发生动态的变化。 4. 运行时不变的值( 可能不确定 ) 这类型的限制值在程序运行时不变,但它不是完全静态的,和内存空间等环境有关。 PS:所谓可能不确定是指这样的值可能是没有上限的 5. 路径名可变值( 可能不确定 ) 这类型的限制值随着路径的变化而变化。1,2类型限制值获取 对于1,2类型的限制值,我们可以直接到头文件中获取到: 1...
阅读全文
摘要:前言 这是一对非常容易混淆的概念。对于用户( 应用程序开发者 )来说,并不一定要严格区分其意义。因为在用户看来,它们都是以C函数的形式出现的。但了解二者的区别对我们掌握整个计算机系统有很大帮助。区别 1. 一部分库函数实现需要使用系统调用( 如 printf 库函数需要调用 write 系统调用 ) 2. 另一部分库函数实现不需要使用系统调用( 如strcpy 库函数不需要使用系统调用因为它不需要使用CPU特权指令 ) 3. 系统调用一定在内核空间执行,而库函数只有其中的系统调用部分执行时才会陷入内核( 如果该库函数使用了系统调用的话 ) 4. 系统调用往往提供的是需要使用CPU特权...
阅读全文
摘要:第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件第二步:下载本书示例源码包 可在这里下载 www.apuenook.com第三步:解压下载到的包并放在用户主目录中第四步:进入包内,打开名为Make.defines.linux的文件( 本人linux系统 ),将其中的WDKIR变量设为源码包的路径。第五步:将源码包中 ipp/ipp.h 文件第122行的status变量更名为Status变量第六步:将源码包中 ipp/printd.c 文件第977行的hp->status改为hp->Status第七步:在源码包 include/apue.h
阅读全文