第四节 输入与输出

上次的笔记中写到的 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. win7不能在同一窗口打开文件夹,解决办法

    1.由于IE浏览器的主页被劫持,总是忽然弹出搜狗的主页,有的时候,忽然弹出IE浏览器(主页是搜狗),然后又自行关闭,我X,我的电脑竟然不受我控制,这可得了,这里我又要骂宁美国度了,made,组装机装了 ...

  2. dvwa+xampp搭建显示乱码的问题:解决办法

    如图,dvwa显示乱码,解决办法有两个:

  3. Codeforces Round #387(div 2)

    A =w= B VOV C QoQ D 题意:贝尔兰冬天很冷,那么司机要换上冬天专用轮胎才能开车.假设冬天一共有n天,有一套冬天专用轮胎,仅能使用k天,这套轮胎不管什么温度都能用,而夏天用的轮胎只能在 ...

  4. ecshop检验邮件是否合法

    <?php /** * 验证输入的邮件地址是否合法 * * @access public * @param string $email 需要验证的邮件地址 * * @return bool */ ...

  5. Partition算法剖析

    博文链接:http://haoyuanliu.github.io/2016/12/18/Partition%E7%AE%97%E6%B3%95%E5%89%96%E6%9E%90/ 对,我是来骗访问量 ...

  6. 移植opencv库到zedboard(制作运行库镜像) 分类: OpenCV ZedBoard ubuntu shell Eye_Detection 2014-11-08 18:48 172人阅读 评论(0) 收藏

    主要参考rainysky的博客 http://ledage.eefocus.com/sj229335457/blog/13-06/295352_ad954.html opencv的话只需要将lib这个 ...

  7. 【网络通信】服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么?

    1. 服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么? 答:对.建立连接时服务器会分配一个新的Socket,但是用的源端口号还是80端口.套接字是由协议类型.源IP.目的IP ...

  8. 高效 css 整理

    避免通用规则 请确保规则不以通用类型作为结束! 不要用标签名或 classes 来限制 ID 规则 如果规则的关键选择器为 ID 选择器,则没有必要为规则增加标签名.因为 ID 是唯一的,增加标签只会 ...

  9. Android&Java的学习新的等

    学习资料 很久没写博客了.适逢这次Srtp项目学弟学妹们要学习Java与Android,我就总结一些学习的教材.方法,分享写材料与心得.纯个人观点,如有不周之处欢迎指出,大家共同探讨提高. *** 教 ...

  10. 利用switch语句进行多选一判断。

    <!doctype html> <meta http-equiv="content-type" content="text/html" cha ...