【C】标准IO库函数

Bentley ORD(openroads designer) 二次开发(BIM)第七节 在ORD SDK中调用MicroStation SDK 从课程刚开始的时候我们就通过学习,了解了ORD的开发是基于MicroStation的,ORD SDK的接口发布的时候也对MicroStation SDK也做了一次发布。这一章将以我们对ORD SDK知识的了解为基础,使用ORD SDK的接口读取道路几何信息、计算桩号,然后再使用MicroStation SDK 读取地形数据和计算投影点的位置,并创建一组方柱形状的Soild。计算方柱底部坐标要经过两大步骤,通过路线的桩号及偏移距离去定位方柱的平面位置,通过方柱的平面位置计算数字地面模型上的投影点的坐标。 阅读详情

fopen/fclose

#include <stdio.h>
 
FILE *fopen(const char *path, const char *mode);
返回值:成功返回文件指针,出错返回NULL并设置errno

int fclose(FILE *fp);
返回值:成功返回0,出错返回EOF并设置errno

mode参数是一个字符串,由rwatb+六个字符组合而成,

r表示读,w表示写,a表示追加(Append),在文件末尾追加数据使文件的尺寸增大。t表示文本文件,b表示二进制文件,有些操作系统的文本文件和二进制文件格式不同,而在UNIX系统中,无论文本文件还是二进制文件都是由一串字节组成,t和b没有区分,用哪个都一样,也可以省略不写。如果省略t和b,rwa+四个字符有以下6种合法的组合:

“r”只读,文件必须已存在
”w“只写,如果文件不存在则创建,如果文件已存在则把文件长度截断为0字节再重新写,也就是替换掉原来的文件内容
”a“只能再文件末尾追加数据,如果文件不存在则创建
”r+“允许读和写,文件必须存在
”w+“允许读和写,如果文件不存在则创建,如果文件已存在则把文件长度截断为0字节再重新写
”a+“允许读和追加数据,如果文件不存在则创建

stdin/stdout/stderr

我们经常用printf打印到屏幕,也用过scanf读键盘输入,这些也属于I/O操作,但不是对文件做I/O操作而是对终端设备做I/O操作。

那为什么printf和scanf不用打开就能对终端设备进行操作呢?因为在程序启动时(在main函数还没开始执行之前)会自动把终端设备打开三次,分别赋给三个FILE *指针stdin、stdout和stderr,这三个文件指针是libc中定义的全局变量,在stdio.h中声明,printf向stdout写,而scanf从stdin读,后面我们会看到,用户程序也可以直接使用这三个文件指针。这三个文件指针的打开方式都是可读可写的,但通常stdin只用于读操作,称为标准输入(Standard Input),stdout只用于写操作,称为标准输出(Standard Output),stderr也只用于写操作,称为标准错误输出(Standard Error),通常程序的运行结果打印到标准输出,而错误提示(例如gcc报的警告和错误)打印到标准错误输出,所以fopen的错误处理写成这样更符合惯例:

if ( (fp = fopen("/tmp/file1", "r")) == NULL) {
    fputs("Error open file /tmp/file1\n", stderr);
    exit(1);
}

errno与perror函数

很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码,请查阅errno(3)的Man Page了解各种错误码,errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数。

如果在程序中打印错误信息时直接打印errno变量,打印出来的只是一个整数值,仍然看不出是什么错误。比较好的办法是用perror或strerror函数将errno解释成字符串再打印。

#include <stdio.h>
 
void perror(const char *s);

perror函数将错误信息打印到标准错误输出,首先打印参数s所指的字符串,然后打印:号,然后根据当前errno的值打印错误原因。例如:

	FILE *fp = fopen("abcde", "r");
	if (fp == NULL)
	{
		perror("Open file abcde");
		exit(1);
	}

如果文件abcde不存在,fopen返回-1并设置errno为ENOENT,紧接着perror函数读取errno的值,将ENOENT解释成字符串No such file or directory并打印,最后打印的结果是Open file abcde: No such file or directory。

大多数系统函数都有一个Side Effect,就是有可能改变errno变量(当然也有少数例外,比如strcpy),所以一个系统函数错误返回后应该马上检查errno,在检查errno之前不能再调用其它系统函数。

strerror函数可以根据错误号返回错误原因字符串。

#include <string.h>
 
char *strerror(int errnum);
返回值:错误码errnum所对应的字符串

有些函数的错误码并不保存在errno中,而是通过返回值返回,就不能调用perror打印错误原因了,这时strerror就派上了用场:

以字节为单位的I/O函数

fgetc函数从指定的文件中读一个字节,getchar从标准输入读一个字节,调用getchar()相当于调用fgetc(stdin)。

#include <stdio.h>
 
int fgetc(FILE *stream);
int getchar(void);
返回值:成功返回读到的字节,出错或者读到文件末尾时返回EOF

对于fgetc函数的使用有以下几点说明:

  • 要用fgetc函数读一个文件,该文件的打开方式必须是可读的。
  • 系统对于每个打开的文件都记录着当前读写位置在文件中的地址(或者说距离文件开头的字节数),也叫偏移量(Offset)。当文件打开时,读写位置是0,每调用一次fgetc,读写位置向后移动一个字节,因此可以连续多次调用fgetc函数依次读取多个字节。
  • fgetc成功时返回读到一个字节,本来应该是unsigned char型的,但由于函数原型中返回值是int型,所以这个字节要转换成int型再返回,那为什么要规定返回值是int型呢?因为出错或读到文件末尾时fgetc将返回EOF,即-1,保存在int型的返回值中是0xffffffff,如果读到字节0xff,由unsigned char型转换为int型是0x000000ff,只有规定返回值是int型才能把这两种情况区分开,如果规定返回值是unsigned char型,那么当返回值是0xff时无法区分到底是EOF还是字节0xff。如果需要保存fgetc的返回值,一定要保存在int型变量中,如果写成unsigned char c = fgetc(fp);,那么根据c的值又无法区分EOF和0xff字节了。注意,fgetc读到文件末尾时返回EOF,只是用这个返回值表示已读到文件末尾,并不是说每个文件末尾都有一个字节是EOF(根据上面的分析,EOF并不是一个字节)。

fputc函数向指定的文件写一个字节,putchar向标准输出写一个字节,调用putchar(c)相当于调用fputc(c, stdout)。

#include <stdio.h>
 
int fputc(int c, FILE *stream);
int putchar(int c);
返回值:成功返回写入的字节,出错返回EOF

对于fputc函数的使用也要说明几点:

  • 要用fputc函数写一个文件,该文件的打开方式必须是可写的(包括追加)。
  • 每调用一次fputc,读写位置向后移动一个字节,因此可以连续多次调用fputc函数依次写入多个字节。但如果文件是以追加方式打开的,每次调用fputc时总是将读写位置移到文件末尾然后把要写入的字节追加到后面。

操作读写位置的函数

#include <stdio.h>
 
int fseek(FILE *stream, long offset, int whence);
返回值:成功返回0,出错返回-1并设置errno
 
long ftell(FILE *stream);
返回值:成功返回当前读写位置,出错返回-1并设置errno
 
void rewind(FILE *stream);//把读写位置移到文件开头

fseek的whence和offset参数共同决定了读写位置移动到何处,whence参数的含义如下:

SEEK_SET

从文件开头移动offset个字节

SEEK_CUR

从当前位置移动offset个字节

SEEK_END

从文件末尾移动offset个字节

offset可正可负,负值表示向前(向文件开头的方向)移动,正值表示向后(向文件末尾的方向)移动,如果向前移动的字节数超过了文件开头则出错返回,如果向后移动的字节数超过了文件末尾,再次写入时将增大文件尺寸,从原来的文件末尾到fseek移动之后的读写位置之间的字节都是0。

以字符串为单位的I/O函数

fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。

#include <stdio.h>
 
char *fgets(char *s, int size, FILE *stream);
返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL

参数s是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个'\0'组成完整的字符串。如果文件中的一行太长,fgets从文件中读了size-1个字符还没有读到'\n',就把已经读到的size-1个字符和一个'\0'字符存入缓冲区,文件中剩下的半行可以在下次调用fgets时继续读。

fputs向指定的文件写入一个字符串,puts向标准输出写入一个字符串。

#include <stdio.h>
 
int fputs(const char *s, FILE *stream);
int puts(const char *s);
返回值:成功返回一个非负整数,出错返回EOF

以记录为单位的I/O函数

#include <stdio.h>
 
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0

fread和fwrite用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节,fread从文件stream中读出size * nmemb个字节保存到ptr中,而fwrite把ptr中的size * nmemb个字节写到文件stream中。

nmemb是请求读或写的记录数,fread和fwrite返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。

格式化I/O函数

#include <stdio.h>
 
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
返回值:成功返回格式化输出的字节数(不包括字符串的结尾'\0'),出错返回一个负值

printf格式化打印到标准输出,

fprintf打印到指定的文件stream中。

sprintf并不打印到文件,而是打印到用户提供的缓冲区str中并在末尾加'\0',由于格式化后的字符串长度很难预计,所以很可能造成缓冲区溢出,用snprintf更好一些,参数size指定了缓冲区长度,如果格式化后的字符串长度超过缓冲区长度,

snprintf就把字符串截断到size-1字节,再加上一个'\0'写入缓冲区,也就是说snprintf保证字符串以'\0'结尾。snprintf的返回值是格式化后的字符串长度(不包括结尾的'\0'),如果字符串被截断,返回的是截断之前的长度,把它和实际缓冲区中的字符串长度相比较就可以知道是否发生了截断。

选项描述举例
#八进制前面加0(转换字符为o),十六进制前面加0x(转换字符为x)或0X(转换字符为X)。printf(“%#x”, 0xff)打印0xff,printf(“%x”, 0xff)打印ff。
-格式化后的内容居左,右边可以留空格。见下面的例子
宽度用一个整数指定格式化后的最小长度,如果格式化后的内容没有这么长,可以在左边留空格,如果前面指定了-号就在右边留空格。宽度有一种特别的形式,不指定整数值而是写成一个``号,表示取一个int型参数作为宽度。printf(“-%10s-“, “hello”)打印-␣␣␣␣␣hello-,printf(“-%-s-“, 10, “hello”)打印-hello␣␣␣␣␣-。
.用于分隔上一条提到的最小长度和下一条要讲的精度。见下面的例子
精度用一个整数表示精度,对于字符串来说指定了格式化后保留的最大长度,对于浮点数来说指定了格式化后小数点右边的位数,对于整数来说指定了格式化后的最小位数。精度也可以不指定整数值而是写成一个``号,表示取下一个int型参数作为精度。printf(“%.4s”, “hello”)打印hell,printf(“-%6.4d-“, 100)打印-␣␣0100-,printf(“-%.*f-“, 8, 4, 3.14)打印-␣␣3.1400-。
字长对于整型参数,hh、h、l、ll分别表示是char、short、long、long long型的字长,至于是有符号数还是无符号数则取决于转换字符;对于浮点型参数,L表示long double型的字长。printf(“%hhd”, 255)打印-1。
转换字符描述举例
d i取int型参数格式化成有符号十进制表示,如果格式化后的位数小于指定的精度,就在左边补0。printf(“%.4d”, 100)打印0100。
o u x X取unsigned int型参数格式化成无符号八进制(o)、十进制(u)、十六进制(x或X)表示,x表示十六进制数字用小写abcdef,X表示十六进制数字用大写ABCDEF,如果格式化后的位数小于指定的精度,就在左边补0。printf(“%#X”, 0xdeadbeef)打印0XDEADBEEF,printf(“%hhu”, -1)打印255。
c取int型参数转换成unsigned char型,格式化成对应的ASCII码字符。printf(“%c”, 256+’A’)打印A。
s取const char 型参数所指向的字符串格式化输出,遇到‘\0’结束,或者达到指定的最大长度(精度)结束。printf(“%.4s”, “hello”)打印hell。
p取void 型参数格式化成十六进制表示。相当于%#x。printf(“%p”, main)打印main函数的首地址0x80483c4。
f取double型参数格式化成[-]ddd.ddd这样的格式,小数点后的默认精度是6位。printf(“%f”, 3.14)打印3.140000,printf(“%f”, 0.00000314)打印0.000003。
3、★☛基于STM32的手机通过wifi控LED灯√♠★ 3、基于STM32的手机通过wifi控LED灯 文章目录3、基于STM32的手机通过wifi控LED灯1、Introduce介绍1.1、课题背景及其意义1.2、 国内外的研究状况2、方案的设计2.1、控制方案的确定2.2、控制方式的选择2.2.1、 单片机芯片的选择方案一方案二方案三方案四2.2.2、无线遥控模块的选择方案一方案二方案三3、硬件电路的设计3.1、系统的功能分析及体系结构设计3.1.1、系统功能分析3.1.2、系统总体结构3.2、模块电路的设计3.2.1、 STM32单片机核心电路设计3.2. 阅读详情

相关推荐

别再只测电压了!用STM32G474的ADC玩点花的:过采样提升精度与多通道扫描实战

本文深入探讨了STM32G474系列单片机的ADC高级应用,包括硬件过采样技术实现16位精度和多通道扫描结合DMA的自动数据采集方案。通过详细的配置步骤和实战案例,帮助开发者突破传统电压测量局限,提升信号采集精度和系统效率,适用于工业监控、医疗设备等高精度应用场景。

weixin_42647395的博客 233

C语言——标准I/O库中的库函数

标准I/O库中的库函数 1.fopen函数 fopen库函数类似于底层的open系统调用。它主要用于文件和终端的输入输出。如果你需要对设备进行明确地控制,那最好使用底层系统调用,因为这可以避免用库函数带来的一些潜在问题,如输入/输出缓冲。 函数原型如下: #include <stdio.h> FILE *fopen(const char *filename, const char...

溪水的博客 1496

Keil MDK v6迁移指南:从AC5到AC6的编译器升级与工程适配

编译器是嵌入式开发的底层基石,决定了代码的执行效率与工程的可维护性。随着ARM工具链向LLVM/Clang架构演进,Arm Compiler 6(AC6)正逐步取代经典的AC5,成为Keil MDK的核心编译引擎。AC6在C11标准支持、代码优化、诊断信息及LTO链接优化上全面超越AC5,但迁移过程中往往伴随内联汇编重写、类型检查严格化、库兼容性等问题。理解编译器差异、掌握CMSIS-Toolbox的工程描述机制,能帮助嵌入式工程师在Cortex-M系列项目中平滑过渡。本文结合Cortex-M4量产工程实战

weixin_29189363的博客 229

标准I/O库

标准 I/O 库则是标准 C 库中用于文件 I/O 操作,通常标准 I/O 库函数相关的函数定义都在头文件<stdio.h>中。 标准 I/O 库函数是构建于文件 I/O(open()、 read()、 write()、 lseek()、 close())这些系统调用之上的,标准 I/O 库函数 fopen()就利用系统调用 open()来执行打开文件的操作、 fread()利用系统调用 read()来执行读文件操作、 fwrite()则利用系统调用 write()来执行写文件操作。 一、FI

风间琉璃的博客 1242

Redis+Unity 数据库搭建

游戏中需要存放排行榜等数据,而且是实时存放,所以就涉及到数据库的问题。这里找服务器大神了解到可以用Redis来做存储,免费的效率极高。

chaixinke的专栏 871

智能体在车联网中的应用:第31天 基于RLlib的多智能体PPO实战:MAPPO算法解决simple_spread合作任务

本文介绍了如何利用RLlib框架实现多智能体强化学习算法MAPPO,解决simple_spread任务。首先分析了RLlib的架构设计理念和多智能体支持特性,包括策略映射、环境包装等核心组件。然后详细解析了simple_spread环境的任务定义、观察空间和奖励函数设计。最后回顾了MAPPO算法原理,说明其如何在RLlib中实现集中式训练与分布式执行的CTDE范式。文章提供了完整的安装指南和环境配置方法,帮助读者快速搭建多智能体强化学习实验环境。

IT深耕十余载,大道之简 1326

标准I/O函数

1

yjplovegn的博客 538

【电力电子控制】基于强化学习的单相逆变器并网电流控制

本文将尝试以 DQN(Deep Q-Network)为例,设计并训练一个面向单相逆变器的智能控制器,实现对并网电流的精准调节。

weixin_62596197的博客 459

C语言标准IO函数整理

目录 一、简介 二、常见的标准IO函数 一、简介 常见的IO函数分为两类,分别是标准IO和系统IO,具体的区别和联系为: 不同系统的系统IO有区别,而标准IO是任何平台通用的; 标准IO是依赖于系统调用IO实现的; 标准IO吞吐量大,文件IO响应速度快; 标准IO与文件IO不可混用。 二、常见的标准IO函数 FIFE *fopen(const char *path, const char *mode); /* path: 打开文件路径 mode: 打开文件模式 */ int fclos

yolo_yyh的博客 3338

uniapp [全端兼容] - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,百度智能云API实现上传录音文件并转换成文字案例(苹果安卓App、微信小程序、移动端H5网页)

uniapp对接百度智能云语音识别,uniapp中实现语音识别(app+小程序),百度语音识别录音转文字_百度智能云,uniapp使用百度语音识别语音转文字,uniapp小程序调用百度语音识别,uni-app 百度语音识别文字并展示功能,uniapp配置自定义界面百度语音识别转文字和原生使用方式,uniapp使用百度语音,uni-app语音转文字功能,使用UniApp技术实现录音并将录音转换为文字,uniapp如何实现语音输入功能功能,Uniapp集成百度智能云API实现录音转文字详细教程完整示例代码dem

🏆 前端领域优质创作者 1万+

电路设计仿真软件:Mentor Graphics_(11).MentorGraphics软件操作与技巧

/ 定义自定义仿真命令// 加载设计文件// 运行仿真// 主函数return 1;return 0;// 自定义设计检查// 获取设计中的所有模块// 遍历所有模块// 检查模块名称是否符合规范if (!// 检查模块中的所有引脚if (!// 主函数main() {通过本节的学习,您应该已经掌握了如何在 Mentor Graphics 中进行二次开发,包括使用 Tcl、C++ 和 Python 进行基本和高级操作。

kkchenjj的博客 1624

标准IO(库函数)

它的作用是将格式化的数据按照指定的格式写入到一个字符串中,而不是输出到屏幕上,它可以格式化数据,也可以组合两个字符串。作用:向指定流中输出单个字符,其中,c是要写入文件的字符的ASCII码值,stream是一个指向已打开文件的指针。sprintf函数将格式化后的字符串写入到str指向的字符数组中,并返回写入的字符数(不包括终止符\0)。fgets函数返回一个指向str的指针,如果成功读取到字符串,则返回str的值;其中,filename是一个字符串,表示要打开的文件的路径和名称;

qq_53090814的博客 646

Android 14.0 系统开机屏幕设置默认横屏显示

在14.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 2146

C标准IO库函数

打开文件成功返回结构体指针,失败返回NULL关闭文件成功返回0,失败返回EOF(1)fopen(2)fclose。

qq_43091023的博客 422

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux C标准IO库函数详解 一

1、open/close open函数可以打开或者创建一个文件#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功

不忘初心的专栏 1984

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C 标准IO 库函数与Unbuffered IO函数

原文:https://blog.csdn.net/jnu_simba/article/details/8806613 先来看看C标准I/O库函数是如何用系统调用实现的。 fopen(3) 调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一个FILE 结构体,通常里面包含了: FILE结构体 { 文件fd 缓冲区指针 ...

Likes的博客 595

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Linux编程基础:C标准IO库函数与Unbuffered IO函数

先来看看C标准I/O库函数是如何用系统调用实现的。  fopen(3)  调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一 个FILE 结构体, 通常里面包含了: 文件fd缓冲区指针缓冲区长度当前缓冲区读取长度出错标志 返回这 个FILE 结构体的地址。  fgetc(3)  通过传入的FILE *参数找

Mr_weng 689

小萌新的IO进线程——标准IO

标准IO操作对象为普通文件。在Linux系统中使用的是GLIBC,它是标准C库的超集具有一定的可移植性,它处理很多细节,例如缓存分配,以优化长度执行I/O等。

mengyv的博客 2146

C语言中的文件IO操作(标准I/O库函数)

例如:FILEfilefopen"io.txt""a+"//注意:下文中的变量 file 就是在这里定义的;/*** 作用:打开文件* 参数1: 文件路径 字符串* 参数2:打开文件的模式 字符串* r 读模式 文件不存在失败* w 覆盖写模式 文件不存在自动创建* a 追加写模式 文件不存在自动创建* r+ 可读 + 可写,从头开始写一个字符替换一个* w+ 覆盖写 + 可读* a+ 追加写 + 可读* 返回值。

lsy1118的博客 1250

标准IO库函数

标准IO和文件IO有什么区别 使用时都是函数形式,但是:标准IO是C库函数,而文件IO是Linux系统的API。 C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API更加好用一些。 库函数比API还有一个优势是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。C库函数具有可移植性,而API不具有可移...

qq_41719582的博客 471

Linux标准IO定位函数,Linux C标准IO库函数详解 一

1、open/close函数open函数可以打开或者创建一个文件。#include #include #include int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);返回值:成功返回新分配的文件描述符,出错返回-1并设置errnoclose函数关闭一个...

weixin_33492770的博客 225

标准IO库介绍

1、标准IO和文件IO有什么区别(1)看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API(2)C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API要更加好用一些。(3)库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。所以C库函数具有可移植...

休憩小站 1817

文件IO与标准IO的区别

结果: 并没有任何输出,因为printf函数为C库函数,且需要将库缓存写满才会输出但是并没有所以不会输出。因此fopen函数的可移植性强于open。功能:重新定位文件内部的指针。

weixin_45910290的博客 533

linux系统编程之基础必备(二):C 标准IO 库函数与Unbuffered IO函数

先来看看C标准I/O库函数是如何用系统调用实现的。  fopen(3)  调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一  个FILE 结构体,其中包含该文件的描述符、I/O缓冲区和当前读写位置等信息,返回这  个FILE 结构体的地址。  fgetc(3)  通过传入的FILE *参数找到该文件的描述符、I/O缓冲区和当前读

Meditation 5747

Linux 标准IO库介绍

1、标准IO和文件IO有什么区别? (1)、看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是Linux系统的API。 (2)、C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API要更加好用一些。 (3)、库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。...

weixin_30378311的博客 243

Linux操作系统——文件编程(C库函数 - 标准IO)| 缓冲机制

功能: 从指定的文件中stream中读取nmemb个元素,每个元素size大小的这么多数据,存放 到指定ptr文件中。函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);对于二进制文件存在大量的'\0',fgets读取文件没有问题,但是fputs输出字符串,遇到'\0'就结束输出。返回值: 成功 返回文件指针(FILE *指针 ---> 文件指针/流指针)

2301_81517435的博客 731
上一篇: 【C】字符串操作函数
下一篇: 【C】数值字符串转换函数
heater404
博客等级 码龄8年 989粉丝 216原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值