unix 环境高级编程-读书笔记与习题解答-第二篇
第四节 输入与输出
上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作。
上一篇笔记用到的 read(STDIN_FILENO, buf, BUFFSIZE) 和 write(STDOUT_FILENO, buf, n) 函数中的2个参数 STDIN_FILENO 和 STDOUT_FILENO 是 __POSIX__标准的一部分,很多函数原型都在其中,这2个参数定义在 <unistd.h> 头文件中,他们是标准输入输出的文件描述符,大部分情况下他们都是0 和1,为了保证可移植以及兼容性问题,很多api中都不使用c原生的数据类型,所以我们使用了它的一个可以替代的宏。
read 函数返回读取到的字节数,这个值用来当作__write__ 函数的第二个参数, 当到达文件的末尾时,read返回0, 这个时候程序正常终止运行,如果发生错误则返回 -1 。
标准IO
标准 IO 函数提供了对不支持缓存的原生 IO 函数带 缓存的界面,使用标准IO函数不用担心BUFFSIZE大小的问题,因为它总能获取准确并合适的长度, 进一段原文中的例子程序.
#include <stdio.h>
int
main(void)
{
int c;
while((c = getc(stdin)) != EOF)
{
if(putc(c, stdout) == EOF)
{
printf("output error");
}
}
if(ferror(stdin))
{
printf("input error");
}
exit(0);
}
该程序非常容易理解,getc() 不停的从标准输入读取数据,putc 则不停的把输入的数据反馈到标准输入, 这几个api的原型都在 __stdio.h__头文件中, 文章末尾会分析每次遇到的api。
程序与进程####
程序
程序并不是进程,程序只有在运行的时候才会存在于进程之中, 当磁盘上的某个可执行文件被内核载入内存并且执行之后才会形成进程,内核使用6个exec函数中的一个来载入可执行程序。
进程和进程ID
程序执行的实例被称为进程(process),有的书中也叫做任务,用任务和进程来表示运行状态中的可执行程序,都是可以理解的。unix系统中的每一个进程都通过一个进程标示符来区分,这个由数字组成的符号被称做 进程ID, 是一个非负整数。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int
main(void)
{
pid_t pid = getpid();
printf("hello world from process ID :%d \n", pid);
exit(0);
}
===========================
unix api解析
stdio.h
int getc(FILE *stream)
该函数的功能是从文件流中读取下一个字符,并且以无符号整数返回,也可能返回文件末尾标识和错误信息。
stdio.h
int putc(int c, FILE *stream);
该函数用于向文件流写入一个字符。
c : 要写入的字符,整形, 写入的时候会自动转换为无符号字符型
stream : 要写入的文件指针。
返回值: 写入的字符转换成整形后的值,发生错误则返回EOF
该函数有可能是用宏定义实现的。
sys/types.h
unistd.h
pid_t getpid()
该函数用来返回当前进程的ID。
unix 环境高级编程-读书笔记与习题解答-第二篇的更多相关文章
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- unix 环境高级编程 读书笔记与习题解答第四篇
第一章 第六节 第一小节 这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识. ____unistd.h____ 该文件包含了u ...
- [置顶] 文件和目录(二)--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-环境高级编程-读书笔记与习题解答-第三篇
第一章 第五节 进程与控制 该小节比较粗略的阐述了unix操作系统中用于进程控制的三个函数,分别为 : fork , exec, waitpid, 其中 exec 有五种变体, 这些变体实现的功能全部 ...
- 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得到批准 ...
随机推荐
- Error, some other host already uses address
rhel 5.9,在修改完网卡配置信息重启网卡之后提示如下无法激活网卡: Error, some other host already uses address 确认配置的IP地址是没有在用的,解决办 ...
- 从客户端(MuliteTextBox2="<a href="http://www....")中检测到有潜在危险的 Request.Form 值
由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报出“从客户端 中检测到有潜在危险的Request.Form值”这样的错. 解决方案一: ...
- UINavigationBar-使用总结
多视图应用程序中,我们常常使用到自定义UINavigationBar来完成导航条的设置. 1.获取导航条 UINavigationBar *navBar = self.navigationCo ...
- request和response的中文乱码问题
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- div页面居中(上下左右)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...
- PC机安装Qt以及QT交叉编译环境 分类: OpenCV ZedBoard shell ubuntu Eye_Detection 2014-11-08 18:57 246人阅读 评论(0) 收藏
PC: apt-get install qtcreator Qt Embedded for ZedBoard: 下载qt-everywhere-opensource-src-4.7.3.tar.gz, ...
- Linux Resin 安装
1 Resin 下载 Resin 官方下载网址. 最新版下载 resin-4.0.36.tar.gz(免费版) resin 安装须要提前配置好jdk.配置jdk请看上面文章 2 Resin 安装 (1 ...
- android 44 SQLiteOpenHelper
java package com.sxt.day06_10; import java.util.ArrayList; import com.sxt.day06_10.entity.StudentBea ...
- perf---LINUX内核研究
http://blog.chinaunix.net/uid-10540984-id-3854969.html http://blog.csdn.net/bluebeach/article/detail ...
- [转] 学习React Native必看的几个开源项目
http://www.lcode.org/study-react-native-opensource-one/ http://gold.xitu.io/entry/575f498c128fe10057 ...