第四节 输入与输出

上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作。

上一篇笔记用到的 read(STDIN_FILENO, buf, BUFFSIZE)write(STDOUT_FILENO, buf, n) 函数中的2个参数 STDIN_FILENOSTDOUT_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 环境高级编程-读书笔记与习题解答-第二篇的更多相关文章

  1. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  2. unix 环境高级编程 读书笔记与习题解答第四篇

    第一章 第六节 第一小节 这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识. ____unistd.h____ 该文件包含了u ...

  3. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  4. [置顶] 文件io(一)--unix环境高级编程读书笔记

    unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...

  5. unix进程的环境--unix环境高级编程读书笔记

    http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937

  6. unix环境高级编程 读书笔记

    1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!

  7. unix-环境高级编程-读书笔记与习题解答-第三篇

    第一章 第五节 进程与控制 该小节比较粗略的阐述了unix操作系统中用于进程控制的三个函数,分别为 : fork , exec, waitpid, 其中 exec 有五种变体, 这些变体实现的功能全部 ...

  8. Unix环境高级编程学习笔记——fcntl

    写这篇文正主要是为了介绍下fcntl,并将我自己在学习过程中的一些理解写下来,不一定那么官方,也有错误,希望指正,共同进步- fcntl: 一个修改一打开文件的性质的函数.基本的格式是 int fcn ...

  9. 《UNIX环境高级编程》笔记--UNIX标准化及实现

    1.UNIX标准化 1.1.ISO C 1989 年后期,C程序设计语言的ANSI(American National Standards Institute) 标准X3. 15 9-1989得到批准 ...

随机推荐

  1. Calendar - SGU 115(日期判断)

    这年的开始的第一天是星期 1 代码如下: =============================================================================== ...

  2. nyoj 95 众数问题【水】

    众数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重 ...

  3. 【原创】javascript——事件思维导图

  4. 执行游戏时出现0xc000007b错误的解决方法

    如图,这个错误使无数玩家烦恼. 出现这个错误,可能是硬件的问题,也可能是软件的问题.可是,因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件解决此问 ...

  5. 生成N个不重复的随机数(转)

    有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次.前面有个程序员捅了漏子,忘了把投票入库,有200个用户产生的投票序列为空.那么你会如何填补这个漏子? 当然向上级反映情况.但是 ...

  6. Scope Chain(作用域链)

    本章,我们讨论一下ECMAScript中的作用域链 , 开门见山. 什么是作用域链 i.ECMAScript是允许创建内部函数的,甚至能从父函数中返回这些函数.作用域链正是内部上下文中所有变量对象(及 ...

  7. 如何自定义UIPickerView中文本的大小和文本靠左或靠右显示?

    需要重写UIPickerView中的 -(UIView*)pickerView:(UIPickerView*)pickerView viewForRow:(NSInteger)row forCompo ...

  8. Python之路【第十三篇】:jQuery -暂无内容-待更新

    Python之路[第十三篇]:jQuery -暂无内容-待更新

  9. <html:text> Id属性

    可能 会遇到这样 的问题,需要通过document.getElementById得到<html:text>标签的id, 可是据说ie设置property后id就是一样的了,不过具体没有去测 ...

  10. ORACLE每组只保留一条记录

    删除同一组内其他记录 DELETE from memactivities a where exists(select 1 FROM (select Uuid,ci_no,lst_upd_ts,ROW_ ...