《C语言参悟之旅》-读书笔记(九)

C语言参悟之旅.pdf C语言参悟之旅.pdf C语言学习相关资料,收藏一下 立即下载
 

                                        第十章  文件

文件就是一组相关元素或数据的有序集合,每个集合都有一个符号化的指代(文件名)

文件通常都被存在外部存储器上,它只在需要使用时被调入内存

一.相关概念:

1.主要分类

  1).  普通文件:驻留在磁盘或其他外部介质上的一些有序数据集,

  2).设备文件(逻辑上的文件): 和主机相连的各种外部设备:如显示器、打印机、键盘

2.流的概念

 流就是表示文本输入(或输出)数据的字符代码的连续序列

 在C语言中,“普通文件”就是一个字节流或二进制流。

3.流的工作原理

  流在启动时,会自动创建3个标准文件指针

   stdin:从操作系统向标准输入设备(通常为键盘)输入数据所构成的“标准输入流”;

   stdout:从操作系统向输出设备(通常为屏幕)输出信息所构成的”标准输出流“

   stderr:由屏幕显示报告出错信息构成的”标准报错流“

C语言还提供了:标准打印机和标准串行设备

小结:流是磁盘或其它外围设备中存储数据的源点或终点。

  产生数据的叫做输入流;

  消耗数据的叫做输出流;

4.处理文件的方法:

  1)缓存文件系统(格式化系统)

  2)非缓冲文件系统(非格式化系统)

5.文本文件和二进制文件

二、文件的基本操作

1、stdio.h中对FILE的结构体类型声明如下:

Typedef   struct
{
    short level;  //记录打开文件流的缓冲区填入数据的情况
    unsigned flags;  //文件状态标志
    char  fd;   //文件句柄,
    unsigned  char hold; //若无缓冲区,则不读取字符
    short  bsize;   //文件缓冲区大小
    unsigned  char * buffer;//文件缓冲区指针
    unsigned  char *curp ;//当前激活的文件指针
    unsigned   istemp;  //临时文件标识
    short    token;   //用于有效性检查
}FILE;

2、文件的打开

fopen(filename,mode);
如:
FILE * pfile;
pfile = fopen("file1", "r") //建立pfile与文件“file1”的关联,即pfile指向file文件
pfile = fopen("d:\\file2.dat","rb"); //打开位于D盘根目录下的文件file2.dat

文件的关闭

3、fclose(pfile)

关闭一个当前打开的文件,fclose在关闭文件前线清楚文件缓存区,关闭成功则返回0,否则返回EOF(-1)

4、文件中的字符写

fputc(c,pfile);
fputc('a', pfile);//把字符写了pfile所指向的文件中

5、文件的字符读

fgetc(pfile);//指向一个已经打开的文件,返回值是一个读取出的字符

6. 文件中字符串读

char * str[3];
fgets(str, 3, pfile);//把pfile指向的文件中2个字符读到str字符串中(第三个是‘\0’)

7.文件中字符串写

fputs("abcd”, pfile);//把字符串“abcd”写入pfile所指的文件中

8.数据块的读写:

int fread(void * buffer,int size, int count, FILE * pfile)//buffer是指向数据内存区域的指针,size则表示简要进行读写的字节数,count代表要读/写多少个size字节的数据项
int fread(void * buffer,int size, int count, FILE * pfile)//从buffer指针指向的缓冲区中读取长度为count个size字节的数据项

三、文件缓存区的处理

int  fflush(  FILE *pfile )//清除由pfile指向的文件缓冲区里的内容。
int  fflushall(  void )//清除所有打开文件缓冲区里的内容。
void setbuf(FILE * pflie ,char * buffer);//把缓冲区域流相关联


                                                                     第11章   动态数据结构


 动态分配就是在程序的执行过程中动态地分配或者回收存储空间的分配内存的方法。

一、实现的方法

 

void   * malloc(unsigned   int size);//在内存的动态存储区中分配一个长度为size的连续空间。
void   * realloc(void * p, unsigned  int  size);//该函数将p所指向内存区域大小给为size,size可以比原来分配的空间大或者小
void   * free(  void  * p);//释放指针p所指向的内存区域

free()函数支付的是指针指向的内存,而不是指针。指针是个变量,只有程序结束时才被销毁。所以释放后内存后最好把指针指向NULL;

说明:

 1)由于分配可能不成功,因此申请了内存空间后,必须检查是否分配成功。

 2)malloc( )和free( )应该是配对的

 3)虽然malloc( )的类型是void * ,任何类型的指针都可以转换为void  * , 但是处于安全考虑,最好还是在前面进行牵制类型转换


 

C语言参悟之旅 本书作者将丰富的开发经验凝聚在方寸之间,以轻松易懂、深入潜出的笔调将C语言的世界描绘得有声有色。 立即下载

相关推荐

C语言参悟之旅pdf

C语言参悟之旅

《C语言参悟之旅》-读书笔记(六)

第7章指针 C语言编写的程序至今仍能和汇编语言程序相媲美,其中一个重要原因就是拥有一种数据类型——指针(内存操作) 1.指针和地址      数据的访问方式——直接访问和间接访问 间接访问方式     通过变量来访问( 计算机用一个别称(变量)来标识存储单元,计算机在寻找内存的数据时就要先把这个别称翻译成地址才行  ) 直接访问方式    通过地址来访问

瞎几波写 981

《c语言参悟之旅》简介

左飞老师的《c语言参悟之旅》推荐。本文件只包含一章,如需阅读,请购买正版图书

《C语言参悟之旅》新鲜试读(完结篇)

lizhaoheng1982的专栏 4909

硬盘dma读写过程

保护模式中,pci上的硬盘dma读写方法

481

219页华为供应链管理:市场预测S&OP计划、销售预测与存货管理精要

S&OP计划的整合作用:S&OP是一种综合的销售和运营计划流程,它将市场预测、生产能力、库存水平和财务目标整合在一起,以确保企业能够平衡供需,实现最佳的运营效率。持续监控与改进:市场预测、S&OP计划、计划委员会的决策以及存货管理都需要持续的监控和评估。供应链策略与执行:华为ISC拥有清晰的供应链策略,并通过SISC架构实现了策略的有效执行,包括供应链网络设计、库存管理、物流优化等。持续的供应链创新:华为ISC不断探索新的供应链管理方法和技术,如数字化供应链、智能物流等,以适应全球化和市场的快速变化。

zuoan1993的博客 2434

c语言参悟之旅,《C语言参悟之旅》-读书笔记(一)

第一章 程序设计与C语言1.什么是计算机程序?计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)2.高级语言的执行方式?( 1 )采用编译方式编译----->编译----->链接----->生产可执行文件(2)解释方式利用针对某种高级语言的解释软件,解释所遇到的高级语言中的每个操作并完成这些操作所要执行的动作高级程序员程序----------...

weixin_42521276的博客 355

西电2023秋季机器学习复习提纲

西电2023秋季机器学习复习提纲,希望对学弟学妹有帮助

weixin_62083045的博客 5683

《C语言参悟之旅》 -读书笔记(一)

最近在看《C语言参考之旅》,感觉这本书不错,作者有用心去写,也写出了一些实际开发过程中雪要注意的细节,和高校教师所编的书还是有一定区别,初看好像很简单,但仔细看还是有一定的深度,适合掌握了一些基本语法的 C语言学习者学习,本文记下了阅读过程中自己认为比较重要而在学校教材里没有讲透彻的地方摘录下来

瞎几波写 1104

【VAX 小番茄安装详细步骤】

本文详细介绍了在VS2022环境下安装Visual Assist X(番茄助手)的步骤及常见问题解决方案。主要内容包括:安装前的兼容性设置(需修改为Windows7兼容模式)、安装流程(卸载旧版本、勾选对应VS版本、替换关键dll文件)以及常见问题处理(如安装失败、工具栏图标缺失等)。文章提供了完整的下载链接和操作截图,特别强调了安装失败后的清理方法(注册表、安装目录和残余文件删除)。最后给出了安装成功后的测试运行指引。

qq_23962581的博客 1718

85-Halcon-- gen_cam_par_area_scan_division 函数功能(生成面阵相机镜头参数)

Halcon的gen_cam_par_area_scan_division算子用于生成面阵相机的镜头参数,支持除法畸变模型。该算子输出包含9个参数的元组,包括焦距(Focus)、畸变系数(Kappa)、像素尺寸(Sx,Sy)、主点坐标(Cx,Cy)和图像尺寸。文中详细解析了各参数含义、数学原理(包括畸变矫正公式和坐标转换),并提供了三个工业应用案例:高精度芯片尺寸测量、机器人焊接引导和大视野汽车表面检测。最后给出了完整的相机标定流程,涵盖参数生成、畸变校正和标定配置步骤,适用于工业视觉系统的精确标定需求。

weixin_45590420的博客 915

《C语言参悟之旅》-读书笔记(七)

第八章 预处理 cpp源文件——(预编译)》预处理文件——(编译)》目标文件——(连接)》可执行文件 预处理:源文件在进行编译时第一遍扫描之前做的工作(词法分析和语法分析) 程序员与预处理器进行交互的工具是一种被称作预处理器指示的命令(一些以“#”号开头的单行命令) 编译的源文件test.cpp #include #define PI 3.1415926 int main( ) {

linuxlinuxlinuxlinux的专栏 1855

Python爬虫实战:利用Selenium与异步技术高效获取雪球财经数据

雪球财经作为国内领先的投资社交平台,汇聚了大量股票数据、财经资讯和投资者观点。对于金融数据分析师、量化投资者和研究人员来说,获取雪球平台的实时数据具有重要价值。然而,雪球网站采用了多种反爬虫机制,包括动态内容加载、请求频率限制和用户行为检测等,使得传统爬虫技术难以有效获取数据。本文将介绍如何使用Python的最新爬虫技术,包括Selenium WebDriver、异步请求处理和智能等待策略,来高效、稳定地爬取雪球财经数据。我们将重点解决以下几个技术难点:动态加载内容的处理登录状态维持与模拟。

2201_76125261的博客 1107

《C语言参悟之旅》-读书笔记(八)

第九章   结构体和共用体 一、结构体 由一系列具有相同类型或不同类型的的数据构成的数据集合(但不能包含函数类型) 1.定义   1)第一种形式 struct 结构体类型名 { 数据类型名1 成员名1; ......... 数据类型名2 成员名2; }; struct 结构体类型名 变量名列表;   2)第二种形式 struct 结构体类型名 {

linuxlinuxlinuxlinux的专栏 1591

【OpenClaw企业级智能体实战】第11篇:制造业设备预测性维护实战——OpenClaw+DeepSeek+Prometheus从零搭建(附完整代码)

本文聚焦制造业设备预测性维护的核心痛点,基于OpenClaw v2026.2.1、DeepSeek智能诊断、Prometheus监控等工具,拆解“设备状态监控→智能故障诊断→预测性维护”三大核心场景。从技术原理、算法构建、实操流程到完整代码实现,提供“数据采集→模型训练→智能调度→自动处置”的全链路方案。方案遵循工业安全规范,采用“只读优先、权限最小化”原则,适配中小制造企业落地需求。通过虚拟案例验证,可使设备非计划停机时间下降65%、平均修复时间缩短47%,既适合新手快速入门,也为进阶读者提供架构优化思路

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 607

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1527

《C语言参悟之旅》-读书笔记(四)

第五章 函数 Ps:     函数的语法本身并不复杂,真正需要编程者去理解和体会的往往是如何用函数来拆解问题,使用函数的水平直接反映在编程者能够组织多大规模的程序 1.C语言中的main( )函数           main( )函数可以调用任何C语言函数;           但任何C语言函数都不能调用main( )函数,main( )函数通常在其所属的程序执行时被操作系统调用。 2

linuxlinuxlinuxlinux的专栏 816

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

《C语言参悟之旅》-读书笔记(三)

第四章   流程控制 1.流程图(当初学的时候觉得很麻烦,现在觉得对整理编程思路帮助还是很大) 2.顺序结构   3.分支结构  1)形式 (  else 总是与其前面最近的 if 配对 )        A . if(表达式)               语句;        B. if(表达式)             语句1;           else

linuxlinuxlinuxlinux的专栏 748

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《C语言参悟之旅》-读书笔记(二)

第三章  运算符、表达式和语句 1.在表达式中使用(   )是一种很好的编程方式能大大提高程序的可读性如:            标准C中对很多运算符的求值顺序都没有进行明确规定,实现顺序与具体实现有关( 编译环境)                                                                        -a +b / 2 - c * 5

linuxlinuxlinuxlinux的专栏 895

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《C语言参悟之旅》-读书笔记(一)

第一章    程序设计与C语言            1.什么是计算机程序?               计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)         2.高级语言的执行方式?              ( 1 )采用编译方式                                  编译----->编译----->链接--

Ac Dream 864
上一篇: 《C语言参悟之旅》-读书笔记(八)
下一篇: HTTP请求流程(一)----流程简介
评论 48
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值