文件IO——文件IO相关概念

1、API

(1)基于linux做应用开发,其实就是通过调用linux系统提供的API来实现。

(2)API 是一些由linux系统提供的函数,给应用层使用,以完成一定的功能。

(3)常用的文件IO的API 有open,close,write,read,lseek等。

2、文件描述符(fd)

文件描述符的本质

文件描述符本质就是一些非负整数,它是进程表中文件描述符表的一个表项,用来表示以及区分一个程序打开的多个文件。进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表。

换言之,文件描述符表是个数组,fd是index,文件表指针是value。

文件描述符的作用域

文件描述符的作用域是当前进程,不同进程下打开的文件的文件描述符可以是相同的数字。

其他描述

(1)文件描述符,是open系统调用时内部由操作系统自动分配的,它会从文件描述符表中挑选一个最小的未被使用的数字返回。

(2)其中0、1、2已经被stdin、stdout、stderr这3个文件占用。当运行一个程序时,默认打开上述三个文件,即把键盘、屏幕、标准错误当做文件。

(3)printf函数默认输出到标准输出stdout上,而fpirntf函数可以指定输出到哪个文件描述符中。

3、文件IO和标准IO的异同

两者的概念

文件IO,即使用open、close、write、read等API函数构成的一套用来读写文件的体系。这套体系可以很好的完成文件读写,但是效率并不是最高的。

标准IO,是一套由C库函数提供文件操作函数来完成文件读写的体系。标准IO由一系列的C库函数(fopen、fclose、fwrite、fread)构成,这些标准IO函数其实是由文件IO封装而来的(fopen内部其实调用的还是open,fwrite内部还是通过write来完成文件写入的)。

标准IO加了封装之后主要是为了在应用层添加一个缓冲机制。我们通过fwrite写入的内容不再直接进入内核中的buf,而是先进入应用层标准IO库维护的buf中,然后标准IO库根据操作系统单次write的最佳count来选择好的时机,将内容write到内核中的buf。然后内核中的buf再根据硬盘的特性来选择好的时机去最终写入硬盘中。

文件IO的API和标准IO的库函数

(1)文件IO的API有open,close,write,read,lseek,dup,dup2,fcntl等等。

(2)标准IO的库函数有fopen、fclose、fwrite、fread、ffulsh、fseek等。

文件IO和标准IO的异同

(1)都是使用函数,但标准IO是C库函数,文件IO是Linux系统提供的API;

(2)C库函数由API封装而来,但是C库函数因为多了一层封装,比API要好用一些。

(3)C库函数具有移植性,而API是针对具体的系统设计的,不同操作系统之间不能通用。

(4)标准IO带有缓存,而文件IO没有缓存。

4、man手册的查询

(1)man  1  xxx    查询linux的shell命令

(2)man  2  xxx    查询API

(3)man 3   xxx    查询库函数

5、退出进程

打开文件时如果出错,后面的操作就不应该继续进行。

有两种方法退出进程:

(2)在main中用return,正常return 0,异常return -1。

(3)典型的终止进程应该用exit、_exit、_Exit之一。前者是库函数,后二者是系统API。 

6、文件重定位

可以把向屏幕输出的内容,输出到某个文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git使用小记

1. 基本操作 全局配置: git config --global user.name xx git config --global user.email xxx 初始化一个仓库: git init 添加: git add "file1.txt" git commit -m "添加文件1" 比较:分别列出每个文件…

LINUX内核之普通自旋锁

LINUX内核之普通自旋锁 CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author:WenHui,WuHan University,2012-6-15 PDF版阅读地址:http://www.docin.com/p1-424285718.html 普通自旋锁 自旋锁…

MFC COMBO-BOX最详细教程

找了好多,这是讲的最清楚的,与大家共享! 转:https://blog.csdn.net/fym0121/article/details/7515862 当你只需从一列对象中选出一个时,使用COMBO BOX是一个好主意,因为它节省空间。这篇文章讲述了如何使…

uboot源码——主Makefile的分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:u-boot Makefile完全解读_williamwang2013的博客-CSDN博客 参考博客:U-boot主Makefile分析_XiaoBaWu的博客-CSDN博客 参考博客:U-boot配置及编译阶段…

Designing Virtual Connect for vSphere 5.x

Designing Virtual Connect for vSphere 5.x如何在 HP C7000刀笼使用VC以满足vSphere 5.x 英文视频连接如下:http://professionalvmware.com/2013/05/vbrownbag-follow-up-designing-virtual-connect-for-vsphere-with-joe-clark-elgwhoppo/1:首先介绍一…

latin1

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。I…

Gnuplot 简单使用

一 、最简单的例子 gnuplot>plot sin(x) 其中 gnuplot> 为命令提示符,不是命令的一部分, 二 、加入设置 1 、设置 x 、y 坐标的范围 改变坐标范围 set xrange [xmin:xmax] set yrange [ymin:ymax] 让 gnuplot 决定坐标轴范围 gn…

C语言和C++的区别

c语言虽说经常和c在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C是C99标准的。C89就是在1989年制定的标准,如今最新的是C11和C11标准。根据不同的标准,它们的功能也会有所不同,但是…

“返回指向栈空间的指针”的错误

char *GetMemory(void) {char p[] "hello world";return p;//试图返回一个指向栈空间的指针 }

VMware vCenter Converter 关闭SSL加密,提高35-40%性能

VMware vCenter Converter 关闭SSL加密,提高35-40%性能原文:http://www.vmwarearena.com/2013/07/improving-transfer-rate-of-p2v-and-v2v.htmlVMware vCenter Converter Standalone 5.0 is a free tool from VMware to easily perform P2V(Physical to virtual co…

以下题目需要当场编写实现,,答案自己写

以下题目需要当场编写实现 1、 写一个通用方法把任何一个类似“abcdefg”的字符串倒叙排。 2、 把字符数组String[] str{“6”,”5”,”3”,”1”,”2”,”4”}中的字符数字按照从小到大调整位置。  两种方法 3、 用杨辉三角规律打一个数字三角型。 4、 把List容器中的数字元…

迭代之嵌套的for循环

/*主要内容: 1.在嵌套表达式中使用类型的运算符。 2.嵌套的for循环。*/ #include<iostream> usingnamespace std; int main() { int i,k,j,m; for(i1;i<5;i2)//递增表达式使增量每次增加2. { for(j1;j<4;j) { kij; cout<<"i"<<i<<…

MFC中CFileDialog用法

CFileDialog文件选择对话框的使用&#xff1a;首先构造一个对象并提供相应的参数&#xff0c;构造函数原型如下&#xff1a; CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt NULL, LPCTSTR lpszFileName NULL, DWORD dwFlags OFN_HIDEREADONLY | OFN…

回文的判断代码

//写一函数int fun(char *p)判断一字符串是否为回文&#xff0c;是返回1&#xff0c;不是返回0&#xff0c;出错返回 - 1 int fun(char *p) {if (p NULL)return -1;else{int length 0;inti 0;int judge 1;length strlen(p);for (i 0; i<length / 2; i){if (p[i] ! p[…

Codeforces - 1194C - From S To T - 子序列 - 排序

https://codeforces.com/contest/1194/problem/C 好像没什么好说的&#xff0c;要能构造s必须是t的子序列&#xff0c;并且相差的字符集合d是p的子集。 用双指针法求两遍子序列就可以了&#xff0c;甚至不需要sort&#xff0c;假如用桶排的话就是O(qn)的。 下面这个错在哪里呢&…

如何在JS中改变Extjs combox 的值

Ext.getCmp(selectList).setValue(store.getAt(0).get(id));转载于:https://blog.51cto.com/owen563/1316856

图像拼接算法及实现

第一章 绪论 1.1 图像拼接技术的研究背景及研究意义 图像拼接(image mosaic)是一个日益流行的研究领域&#xff0c;他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式&#xff0c;通过对齐一系列空间重叠的图像&#xff0c;构…

我的收藏

csdn www.csdn.net 高技术 www.iteye.com 上次买过的手机贴膜http://item.taobao.com/item.htm?id15873819314 www.oschina.com www.itpub.com 转载于:https://www.cnblogs.com/sure32121893/archive/2012/06/25/2560788.html

字符串循环右移的一道题目

void * loopmove_3(char *pstr, int steps) {int n strlen(pstr);//不包含\0steps % n;//移动的步数n - steps;if ((strlen(pstr)<1) || (steps 0)) {return(NULL); //表示没有操作}else {char *tmp malloc(strlen(pstr) 1);if (NULL ! tmp) {strcpy(tmp, pstr n);*(ps…

程序员,你还在 Select * 吗?

应用程序慢如牛&#xff0c;原因多多&#xff0c;可能是网络的原因、可能是系统架构的原因&#xff0c;还有可能是数据库的原因。 那么如何提高数据库SQL语句执行速度呢&#xff1f;有人会说性能调优是数据库管理员&#xff08;DBA&#xff09;的事&#xff0c;然而性能调优跟程…