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得到批准 ...
随机推荐
- oracle从客户端到sql语句追踪
这两天看小布老师的视频学习了一下从客户端到oracle数据库发送执行的SQL语句的跟踪,整理一下笔记. 需要用到的命令:netstat oracle端要用到的四个视图为: V$session:当前有多 ...
- 数据库的发展现状与前景——NewSQL界的佼佼者,如Couchbase、Aerospike、Marklogic和 SequoiaDB,NewSQL的许多厂商,如:MemSQL、VoltDB、ScaleDB和CitusDB
转自:http://news.sequoiadb.com/cn/Detail-id-42 2015-03-20 Strata+Hadoop World(SHW)大会是全世界最大的大数据大会之一. ...
- Qt 智能指针学习(7种指针)
Qt 智能指针学习 转载自:http://blog.csdn.net/dbzhang800/article/details/6403285 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ ...
- Android 颜色渲染(三) Shader颜色渲染
版权声明:本文为博主原创文章,未经博主允许不得转载. 相信看过在上一篇中提到的三篇文章后,大家已经对颜色处理方面有更深的体会. 之前讲到颜色渐变的效果, 具体怎么做呢,这就需要应用颜色渲染. 首先要介 ...
- 亲测linux6.4 安装
1.bios下点击 u盘 启动进入(两个Flash1.0,都试试) 2.最关键的部分是,不如windows启动 没有linux界面. others(只是把这个修改一下名字为windows7) cent ...
- shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏
最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...
- Java(Android)线程池 总结
JAVA的Executors源码:(可以看出底层都是通过ThreadPoolExecutor来具体设置的~) public static ExecutorService newCachedTh ...
- linux系统时间同步更新
linux中的时钟分为系统时钟和硬件时钟.硬件时钟通过bioss进行设置,系统时钟通过linux kernel进行设置.当linux启动时,bioss会读取系统时钟的时钟设置.在linux中涉及时间设 ...
- jquery实现很简单的DIV拖动
今天用jquery实现了一个很简单的拖动...实现思路很简单 如下: 在thickbox 弹出层内实现拖拽DIV,那么得进行一下相对宽高的运算:必须加上相对于可见窗口宽高和弹出层宽高之间的差: ...
- vs在winform中不给力哈-错误不提示
我的操作系统是windows Server 2008 x64,运行winform的时候,对Dictionary累加值.运行的时候,项目一闪而过,于是我在Project的Properties上选择运行的 ...