unix高级环境编程(二)-------------------基础知识
来源:互联网 发布:投资返利网站源码 编辑:程序博客网 时间:2024/05/16 23:59
头文件<stdio.h>以及STDIN_FILENO和STDOUT_FILENO是POSIX标准的一部分,头文件<stdio.h>包含了很多unix系统服务的函数原型,例如read,write。
STDIN_FILENO和STDOUT_FILENO的宏定义分别是0和1,是标准输入和标准输出的文件描述符。
我们可以cc copy.c error.c
./a.out >1.txt
zhong duan xie ru wen jian
ctrl +c
cat 1.txt
可以看到我们能从终端直接写入内容到文件。。
同理
./a.out <1.txt >2.txt
能将文件1.txt的内容复制到2.txt
另外read函数是阻塞的,while((n = read(0,buf,BUFFSIZE)) > 0);如果运行./a.out 不重定向标准输入,n > 0一般来说是恒成立的,阻塞等待终端写入数据,哪怕你只输入一个回车换行符。
只有read错误返回 - 1,或者read的对象是文件,到达文件末尾时,read会返回0。
另外 0 是标准输入的文件描述符,1是标准输出的文件描述符
标准I/o
为不带缓冲的I/O函数(open,read,write,lseek,close)提供了一个带缓冲的接口。标准io不用选区最佳缓冲大小,并简化了对输入行的处理。例如fgets读取一个完整的行,而read必须指定要读取的字节数,例如我们最熟悉的IO函数printf。我们知道<stdio.h>头文件包括了所有标准IO函数的原型。
例:
#include "apue.h"
int main(void)
{
int c;
while((c = getc(stdin)) != EOF)
if(putc(c,stdout) == EOF)
{
err_sys("output error");
}
if(ferror(stdin))
{
err_sys("input error");
}
exit(0);
}
这个程序的用法同上,
为什么getc这种标准输入也可以呢,因为这些都是带缓存的标准IO函数,将读到的数据先放入缓存,再有标准输出读出来,不用指定字节数。
这两种程序有什么区别呢?
首先read...没有缓存,需要自己创建缓存buf,并指定读出/写入数据的大小,而getc,gets...自带缓存,不用指定大小
其次read...传参是文件描述符,而getc,gets...传参是文件流/输入输出流,大概吧...
stdin和stdout标准输入和标准输出流。
什么是流(stream)? 什么鬼,有空再看 http://blog.csdn.net/hansnowqiang/article/details/50130437
- unix高级环境编程(二)-------------------基础知识
- UNIX环境高级编程(1):UNIX基础知识(1)
- UNIX环境高级编程(第1章 UNIX基础知识)
- UNIX环境高级编程学习笔记(一)UNIX基础知识
- 一起学习unix环境高级编程--unix基础知识(1)
- unix高级环境编程--unix基础知识
- 《UNIX环境高级编程》---1.UNIX基础知识
- 1.UNIX 环境高级编程--UNIX基础知识
- 《Unix环境高级编程》 总结 (二)
- unix高级环境编程学习(一) ---------------基础知识
- UNIX高级环境编程学习(三)----------------基础知识
- UNIX高级环境编程学习(四)---------------------基础知识
- UNIX环境高级编程-读书笔记-网络编程(二)
- UNIX高级环境编程——UNIX基础知识笔记
- UNIX环境高级编程-第1章 Unix基础知识
- UNIX环境高级编程——UNIX基础知识
- 《UNIX环境高级编程》——UNIX基础知识
- 《UNIX环境高级编程》笔记:第1章 UNIX基础知识
- Charles 抓包工具使用方法
- c++之Vector(动态 )
- UVa 714
- HTML5 进阶系列:web Storage
- Freemarker自定义标签
- unix高级环境编程(二)-------------------基础知识
- angularJs中关于ng-class的三种使用方式说明
- java面试题经典1
- Apache服务器错误问题Internal Server Error
- Java之TCP网络编程
- BZOJ 3208 花神的秒题计划Ⅰ
- 解决Cannot change version of project facet Dynamic Web M
- JS实现H5图片3D旋转动画
- 欢迎使用CSDN-markdown编辑器