当前位置: 首页 > news >正文

黄做网站网站建设推广费用

黄做网站,网站建设推广费用,建设企业网站的公司,wordpress 安装包深入了解语言级别(C语言)文件操作的"读"与"写" 在学习前,我们先要知道在Linux下的一个原则:一切皆是文件 如何理解呢?举个外设的例子,比如键盘和显示器,这两个外设也可以其实本质上也是文件&…

深入了解语言级别(C语言)文件操作的"读"与"写"

在学习前,我们先要知道在Linux下的一个原则:一切皆是文件

如何理解呢?举个外设的例子,比如键盘和显示器,这两个外设也可以其实本质上也是文件,通过与内存的交互来交换信息,而交互的过程其实就是"读"与"写"的过程。而键盘和显示器这两个文件是会默认被打开的

所以想要理解读与写,也就是对文件操作,那就必须得从内存的角度去看待问题:

  1. 从“人”的角度看,人读书写字,这个过程其实就是,书通过文字来传达出信息,人读取信息后,并记录文字在纸上。人读书其实就是向人大脑进行的一个输入知识的过程,这个过程称为“读”,人记录信息文字在纸上,也就是人大脑向纸进行输出的过程,这个过程称为“写”。
  2. 从“内存”的角度看,以显示器和键盘这两个文字为例,键盘就好比书上的文字,内存读取键盘时,就相当于人读取信息的过程,相对于内存而言,这是一种输入,人通过键盘向内存传达信息,也就是内存输入信息的过程,也就是“读”。而内存向显示器上打印文字的过程,就好比人在纸上写字的过程,这是内存对外的一个输出过程,也就是“写”。

因此,从内存的角度来看问题的话,一切都简单起来了:

键盘无外乎就是一种“读”:对应C/C++就是:scanf,cin,是input:输入的过程

显示器无外乎就是一种“写”:对应C/C++就是:printf,cout,是output:输出的过程

这样我们再来看看:什么是文件呢?

文件:站在系统的角度,能够被input或者output写出的设备就叫文件!!

狭义上的文件:普通磁盘文件。

广义上的文件:显示器,键盘,网卡,声卡,显卡,磁盘,几乎所有的外设,都可以称为文件!

语言级文件读写操作函数

学习完这个小知识,接下来就来看看文件读写操作的相关语言级别的函数:

功能函数名适用于
字符输入函数fgetc所有输入流->读
字符输出函数fputc所有输出流->写
文本行输入函数fgets所有输入流->读
文本行输出函数fputs所有输出流->写
格式化输入函数fscanf所有输入流->读
格式化输出函数fprintf所有输出流->写
二进制输入fread文件
二进制输出fwrite文件

fgetc和fputc

int fputc( int c, FILE *stream );
int fgetc( FILE *stream );

image-20230908115511407

image-20230908115440177

fputc是一种写操作,属于输出流,能够向指定文件种写入一个char类型,可以理解成:char put file(字符放入文件),若失败则返回EOF

fgetc是一种读操作,属于输入流,能够读取指定文件的一个字符,若读取失败,则返回EOF

代码演示:

int main()
{//以键盘显示器为例://键盘显示器是默认打开的文件,因此不用进行open和close操作int ch=0;while((ch=fgetc(stdin))!=EOF){fputc(ch,stdout);}return 0;
}

fgets 和 fputs

int fputs( const char *string, FILE *stream );
char *fgets( char *s, int size, FILE *stream );

image-20230908185646783

image-20230908185627656

fputs 和 fgets 类似于fputc 和 fgetc

fputs 是一种写操作,属于输出流,能够向指定文件种写入一个string类型,可以理解成:char put string(字符串放入文件,但不包括 ‘\0’ ),若失败则返回EOF

fgets 是一种读操作,属于输入流,能够读取指定文件中至多比size大小小1的字符串然后将他放入指定的buffer,若提前遇到EOF文件末尾或者 ‘\n’ 则读取提前终止,‘\n’ 也会被读入,读入完成后将自动填充 ‘\0’ 。若读取成功则返回s字符串,失败或者什么都没读取到则返回NULL

代码示例:

int main()
{//以键盘显示器为例://键盘显示器是默认打开的文件,因此不用进行open和close操作char buffer[64];while((fgets(buffer,sizeof buffer,stdin)!=NULL)){fputs(buffer,stdout);}return 0;
}

image-20230909134927998

fscanf 和 fprintf

int fscanf(FILE *stream,const char *format,...);
int fprintf(FILE *stream,const char *format,...);

fscanf文档介绍:

The scanf() family of functions scans input according to format as described below. This format may contain conversion specifications; the results from such conversions, if any, are stored in the locations pointed to by the pointer arguments that follow format. Each pointer argument must be of a type that is appropriate for the value returned by the corresponding conversion specification.

If the number of conversion specifications in format exceeds the number of pointer arguments, the results are undefined. If the number of pointer arguments exceeds the number of conversion specifications, then the excess pointer arguments are evaluated, but are otherwise ignored. These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching
failure. The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error
occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indicate the error.

fprintf文档介绍:

The functions in the printf() family produce output according to a format as described below. fprintf() write output to the given output stream;Upon successful return, these functions return the number of characters printed
(excluding the null byte used to end output to strings).If an output error is encountered, a negative value is returned.

fscanf 是一种 ”读” 操作,属于一种输入流,他可以向指定的文件中读取信息并放入格式化参数中, 但若读取的信息大于格式化参数的大小,则结果就不被定义,读取成功则返回读取的信息的数量,失败则返回EOF

fprintf 是一种 “写” 操作,属于一种输出流,他可以向指定文件中写入指定的格式化参数,写入成功则返回写入的char类型的数量但不包括 ’\0‘ ,如果失败则返回一个负值

他们两个的用法其实跟scanf和printf一致,只不过需要指定对应的文件流,而scanf和printf则默认第一个参数为stdin和stdout。

代码示例:

int main()
{//以键盘显示器为例://键盘显示器是默认打开的文件,因此不用进行open和close操作char s[20];while(fscanf(stdin,"%s",&s)!=EOF)fprintf(stdout,"%s\n",s);return 0;
}

注意格式化的使用方法,遇到空格就代表一个占位符的读取已经读取完毕,若空格后还有单词且没有新的占位符就不会进行读入。

fwrite和fread

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);                     

image-20230909151414123

image-20230909153937160

fwrite 是一种 “写” 操作,属于输出流,可以从内存中指定位置的数据中取出数据向指定文件中写入基本单位大小为size,个数为nmemb个size单位的数据(包括二进制数据),若写入成功则返回实际写入的基本单位的个数

fread 是一种 “读” 操作,属于输入流,可以从指定文件中读取基本单位大小为size,个数为nmemb个size单位的数据(包括二进制数据)放入被指向的内存位置中,若读取成功则返回实际读取的基本单位的个数

int main()
{FILE* fp=fopen("log.txt","w");if(fp==NULL){perror("fopen");}const char* s1="hello fwrite\n";fwrite(s1,strlen(s1),1,fp);if(fwrite){fwrite(s1,strlen(s1),1,stdout);}fclose(fp);return 0;
}

image-20230909155547356

";
fwrite(s1,strlen(s1),1,fp);
if(fwrite)
{
fwrite(s1,strlen(s1),1,stdout);
}
fclose(fp);
return 0;
}


[外链图片转存中...(img-GPl5d72L-1707560962937)]
http://www.yayakq.cn/news/847147/

相关文章:

  • php网站开发图文教程手机主题制作软件
  • 官网最新版cmsv6seo sem是指什么意思
  • 杭州市做网站的公司湖南建设工程招标网
  • 网站选服务器文件百度快速收录在线提交工具
  • 欧洲购物网站排名wordpress短信宝
  • 专注建设高端网站免费网页建设
  • 网站建设及推广服务公司wordpress 上传安装不了
  • 如何给网站添加icowordpress安装配置
  • 凡科网站 怎么开支付网络推广seo公司
  • 如何买域名发布网站长沙自动seo
  • 电子商务网站建设与维护第二版海口建站费用
  • 成都php网站建设工程师wordpress设置上传文件大小
  • 网站建设公司好哪家好wordpress 代码 换行
  • 网站设计培训哪里好wordpress如何套模板建站
  • 网站建设怎么选择MySQL数据库大小别人带做的网站关闭了权限咋办
  • 安全狗iis版删了以后 网站打不开常州网站建设怎么样
  • 雄安智能网站建设公司ps制作网站logo
  • 备案要关闭网站吗网站做404是什么意思
  • 上海做网址域名的公司重庆seo网站
  • 软件网站开发公司名字企业电话卡
  • 汽车网站建设m开头的可以做网站的软件
  • wap 企业网站网站怎么打开
  • 郑州网站建设网站制作网上找工程项目怎么找
  • 酒店用品网站源码asp网站建设 文献
  • 织梦企业门户网站东营市造价信息网
  • wordpress多语言子域名寿光网站建设优化
  • 医院做网站的费用多少小满crm
  • 做高端网站建设个人网站设计模板素材
  • 滕州网站建设助企网络网络营销教案
  • 建设网站的好处和优点北京效果图公司