文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux输入输出与文件

2022-06-03 14:03

关注

1. 基于文件指针的文件操作(缓冲)

linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件。

1.1. 文件的创建,打开与关闭

原型为:

#include <stdio.h> //头文件包含

FILE *fopen(const char *pach,const char *mode); //文件名 模式

int fclose(FILE *stream);

fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL.

fopen创建的文件的访问权限将以0666与当前的umask结合来确定。

1.2. 读写文件

基于文件指针的数据读写函数较多,可分为如下几组:

数据块读写:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

fread从文件流stream 中读取nmemb个元素,写到ptr指向的内存中,每个元素的大小为size个字节。

fwrite从ptr指向的内存中读取nmemb个元素,写到文件流stream中,每个元素size个字节。

所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动size*nmemb个字节。

1.3.文件定位:

文件定位指读取或设置文件当前读写点,所有的通过文件指针读写数据的函数,都是从文件的当前读写点读写数据的。

常用的函数有:

#include <stdio.h>

int feof(FILE * stream); //通常的用法为while(!feof(fp))

int fseek(FILE *stream, long offset, int whence);//设置当前读写点到偏移whence 长度为offset处

long ftell(FILE *stream); //用来获得文件流当前的读写位置

void rewind(FILE *stream); //把文件流的读写位置移至文件开头 èfseek(fp, 0, SEEK_SET);

feof判断是否到达文件末尾的下一个(注意到达文件末尾之后还会做一次)

fseek设置当前读写点到偏移whence 长度为offset处,whence可以是:

SEEK_SET (文件开头 –>0)

SEEK_CUR (文件当前位置 –>1)

SEEK_END (文件末尾 –>2)

ftell获取当前的读写点

rewind将文件当前读写点移动到文件头

1.4.格式化读写:

#include <stdio.h>

int printf(const char *format, ...); //相当于fprintf(stdout,format,…);

int scanf(const char *format, …);

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

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

int sprintf(char *str, const char *format, ...); // eg: sprintf(buf,”the string is;%s”,str);

int sscanf(char *str, const char *format, …);

以f开头的将格式化后的字符串写入到文件流stream中

以s开头的将格式化后的字符串写入到字符串str中

1.5.单个字符读写:

使用下列函数可以一次读写一个字符

#include <stdio.h>

int fgetc(FILE *stream);

int fputc(int c, FILE *stream);

int getc(FILE *stream); è 等同于 fgetc(FILE* stream)

int putc(int c, FILE *stream); è 等同于 fputc(int c, FILE* stream)

int getchar(void); è 等同于 fgetc(stdin);

int putchar(int c); è 等同于 fputc(int c, stdout);

getchar和putchar从标准输入输出流中读写数据,其他函数从文件流stream中读写数据。

1.6.字符串读写:

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

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

int puts(const char *s); è 等同于 fputs(const char *s, int size, stdout);

char *gets(char *s); è 等同于 fgets(const char *s, int size, stdin);

fgets和fputs从文件流stream中读写一行数据;

puts和gets从标准输入输出流中读写一行数据。

fgets可以指定目标缓冲区的大小,所以相对于gets安全,但是fgets调用时,如果文件中当前行的字符个数大于size,则下一次fgets调用时,将继续读取该行剩下的字符,fgets读取一行字符时,保留行尾的换行符。

fputs不会在行尾自动添加换行符,但是puts会在标准输出流中自动添加一换行符。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯