2018-08-13 (星期一)

2018-08-13 (星期一)
取得当前流位置
    不同步lseek(),fseek()并不会返回更新过得位置.为此,另外提供了一个接口.ftell()函数可用于返回stream的当前流:

#include <stdio.h>
long ftell(FILE *stream)

发生错误时,它会返回-1并且将errno设定成适当的值.
    此外,标准I/O链接库还提供了fgetpos():

#include <stdioh.h>
int fgetpos(FILE *stream, fpos_t *pos);

执行成功时,fgetpos()会返回0并且将stream的当前流位置放于pos;执行失败时,它会返回-1并且将errno设定成适当的值.如同fsetpos(),之所以会提共fgetpos(),只是因为非linux平台具体负责的文件位置数据类型.

刷新一个流
    标准I/O链接库提供了一个接口,可用户将用户缓冲区写出到内核,以确保write()写入至流的所有数据可以被刷新.fflush()函数提供了此功能:

#include <stdio.h>
int fflush(FILE *stream);

调用此函数时,stream所指向的流中任何未被写入内核的数据会被刷新至内核.如果stream为NULL,侧进程中所打开的输入流均会被舒心.执行成功时,fflush()会返回0,执行失败时,它会返回EOF并且讲errno设定成适当的值.
    要了解fflush()所造成的影响,必须了解C链接库所维护的缓冲区和内核的缓冲机制有何差异.

错误与EOF
    有些标准I/O借口,例如fread(),无法有效的将执行失败的情况传达给调用者,因为他们没有提供任何机制区分错误和EOF.对于这些调用以及其他场合,这可以检查特定流的状态,以确定它到地址遇到了错误还是抵达了文件末端.为此标准I/O链接库提供了两个接口.函数ferror()用于测试stream智商是否设定了错误指示器:

#include <stdio.h>
int ferror (FILE *stream);

错误指示器由其他的标准I/O接口所定义,用于反应错误状态.如果设定了指示器,则此函数会返回一个非零值,否则返回0.
    函数feof()用于测试stream之上是否是定了EOF指示器:

#include <stdio.h>
int feof (FILE *stream);

EOF 指示器由其他的标准I/O接口所设定,英语反应抵达了文件的末端.如果设定了指示器,此函数会返回一个非零值,否则返回0.
    函数clearerr()用于清楚stream之上的错误和EOF指示器:

#include <stdio.h>
void clearerr(FILE *stream);

此函数没有返回值,而且也不会失败 (无法知道所提供流是否有效).你应该在检查错误与EOF指示器之后调用clearerr(),因为你无法在时候挽回被清除的指示器.

    /* ‘f‘十个有效的流 */
    if (ferror (f))
        printf ("Error on f!\n");
    if (feof (f))
        printf ("EOF on f!\n");
    clearerr(f);

取得相应的文件描述符
    有时,取得支持指定流的文件描述符会很有用.例如,要对流进行系统调用时,如果不存在相关联的标准I/O函数,则可以通过它的文件描述符.要取得支持(backing)流的文件描述符,可以使用flleno ():

#include <stdio.h>
int fileno(FILE *stream);

执行成功时,fileno会返回与stream相关联的文件描述符;执行失败时,它会返回-1,这只会发生在指定了无效的流时,在此情况下,fileno()会把errno设定成EBADF.

原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/9471823.html

时间: 2024-11-08 21:29:56

2018-08-13 (星期一)的相关文章

2014/08/13 – Backbonejs

[来自: Backbone.js 开发秘笈 第7章] Restful 服务调用 Collection.fetch() - 请求集合 Model.save() - 新增或修改模型(根据 Model.isNew() 方法判断操作类型) Model.destroy() - 删除模型 Model.sync() - 请求的执行方法, fetch(), save(), destroy() 都调用其方法进行操作请求 (function ($) { //define ----------------------

新手C#string类常用函数的学习2018.08.04

ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower(); 这可以使用户的输入不区分大小写,例如验证码. ToUpper()用于将字符串全部变为大写,与上面类似. Trim()可以用于去掉两边的空格. string s1 = " a b c "; s1 = s1.Trim();//用于去除字符串两边的空格 Console.WriteLine

Intel Digital Innovation Industry Summit(2018.08.17)

时间:2018.08.17地点:北京金隅喜来登大酒店 原文地址:https://www.cnblogs.com/xuefeng1982/p/10331638.html

python全栈学习记录--3(2018.1.13) 计算机基础知识

一.Linux操作系统1.unix是目前世界上最稳定,安全的系统.是分时操作系统,多个联机终端和采用多道技术.2.开源代表代表公开,所有人可以编辑查看,但不代表免费.3.服务器要的是性能,稳定,效率,不间断运行.故LINUX更能胜任,WINDOW不行,运行久了就会很卡.4.桥接:用交换机的方式上网,相当于在局域网内多增加一台电脑联网.5.虚拟内存一般设为物理内存的1.5-2倍,但不超过8G.物理内存大于4G就足以运行目前几乎所有程序了,没必要设置虚拟内存了. 二.网络基础之OSI五层协议1.网络

2018.3.13 12周2次课

十二周二次课(3月13日) 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.9 Nginx域名重定向 12.6 Nginx安装 下载和解压: cd /usr/local/src wget http://nginx.org/download/nginx-1.13.9.tar.gz tar -zxvf nginx-1.13.9.tar.gz 配置编译选项 cd nginx-1.13.9 ./configure --prefix=/usr/local/nginx

2018.4.13 16周3次课

十六周三次课 (4月13日) 19.7 主动模式和被动模式 19.8 添加监控主机 19.9 添加自定义模板 19.10 处理图形中的乱码 19.11 自动发现 19.7 主动模式和被动模式 主动或者被动是相对客户端来讲的 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可. 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力. 服务端有公网ip,客户端只有内网ip,但

2018.6.13 Java语言基础复习总结

Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计算机执行. 1.2汇编语言 负责把汇编语言翻译成二进制的机器语言,这种翻译程序就是汇编程序. 1.3高级语言 1954年第一个完全脱离机器硬件的高级语言FORTRAN诞生 1.3.1C语言 是一种计算机程序设计语言,它既有高级语言的特点,又具有汇编语言的特点. 1.3.2 C++语言 是具有面向对象

解读 2018:13 家开源框架谁能统一流计算?

018 年接近尾声,我018 年接近尾声,我策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本文是实时流计算 2018 年终盘点,作者对实时流计算技术的发展现状进行了深入剖析,并对当前大火的各个主流实时流计算框架做了全面.客观的对比,同时对未来流计算可能的发展方向进行预测和展望.策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本文是实时流计算 20

2018.1.13

和虚拟机折腾了一整天...最后发现是最新版本的vagrant有bug,mdzz. 恰好今天win10还疯狂推补丁,估计是和之前的cpu的bug有关的,然后中途安装补丁还死机了一次... 话说我得考虑把笔记本里的centos换掉了,实在不知道那玩意有啥用.啥时候如果需要出门然后带个centos的笔记本,那就很傻逼了... 原文地址:https://www.cnblogs.com/dynasty919/p/8280585.html

2018.1.13面向对象之继承复习

class Rect{ int width=2, height=6; void setWidth(int width){ this.width=width; //代码1 将参数的值赋给成员变量width } void setHeight(int height){ this.height=height; //代码2 将参数的值赋给成员变量height } int getArea(){ return width*height; } } public class E{ public static vo