LINUX文件格式化读写(文件指针,缓冲)
body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}
|
linux的文件和文件描述符
linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件。
普通文件:也称磁盘文件,并且能够进行随机的数据存储(能够自由seek定位到某一个位置);
管道:是一个从一端发送数据,另一端接收数据的数据通道;
目录:也称为目录文件,它包含了保存在目录中文件列表的简单文件。
设备:该类型的文件提供了大多数物理设备的接口。它又分为两种类型:
字符型设备和块设备:字符型设备一次只能读出和写入一个字节的数据,包括调制解调器、终端、打印机、声卡以及鼠标;块设备必须以一定大小的块来读出或者写入数据,块设备包括CD-ROM、RAM驱动器和磁盘驱动器等,一般而言,字符设备用于传输数据,块设备用于存储数据。
链接:类似于Windows的快捷方式和Linux里的别名,指包含到达另一个文件路径的文件。
套接字:在Linux中,套接字也可以当作文件来进行处理。
基于文件指针的文件操作函数是ANSI标准函数库的一部分。
|
| 1.1. 文件的创建,打开与关闭
原型为:
#include <stdio.h> //头文件包含
FILE *fopen(const char *path,const char *mode); //文件名 模式
int fclose(FILE *stream);
fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL.
fopen创建的文件的访问权限将以 0666 与当前的umask结合来确定。
mode 的可选模式列表
(截断原内容指文件打开,里面内容就不见了) 在Linux系统中,mode里面的’b’(二进制)可以去掉,但是为了保持与其他系统的兼容性,建议不要去掉。ab和a+b为追加模式,在此两种模式下,无论文件读写点定位到何处,在写数据时都将是在文件末尾添加,所以比较适合于多进程写同一个文件的情况下保证数据的完整性。
|
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个字节。
整块copy,速度较快,但是是二进制操作
|
||||||||||||||||||||||||||||||||||||||||||
| 格式化读写:
#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, …); 重点
fprintf将格式化后的字符串写入到文件流stream中
sprintf将格式化后的字符串写入到字符串str中
单个字符读写:
使用下列函数可以一次读写一个字符
#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中读写数据。
字符串读写:
char *fgets(char *s, int size, FILE *stream);
int fputs(const char *s, FILE *stream);
int puts(const char *s); → 等同于 fputs(const char *s,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会在标准输出流中自动添加一换行符。
|
文件定位:
文件定位指读取或设置文件当前读写点,所有的通过文件指针读写数据的函数,都是从文件的当前读写点读写数据的。
常用的函数有:
#include <stdio.h>
int feof(FILE * stream);//通常的用法为while(!feof(fp)),到达文件尾返回一个非0值.
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将文件当前读写点移动到文件头
注:基于文件指针的文件操作请参考《C语言文件操作常用函数详解.doc》
|
|
#include <strings.h>
void bzero(void *s, size_t n); //对数组进行初始化,初始全部为0或‘\0’
查看程序执行的返回值 echo $?
|
int sprintf(char *str, const char *format, ...);
eg: sprintf(buf, “%s%s” ,”the string is” , “str”); //重点
|
| int sscanf(const char *str, const char *format, ...);
| //sscanf.c
#include<stdio.h>
typedef struct student
{
int num ;
char name[20];
float score;
}stu;
int main()
{
stu s;
char *p="110 meihao 99.99";
int ret;
ret=sscanf(p,"%d %s %f",&s.num,(char *)&s.name,&s.score);
if(3!=ret)
{
perror("sscanf");
return -1;
}
printf("%d %s %4.2f\n",s.num,s.name,s.score);
return 1;
}
|
Linux下ctrl+d 用于结束输入,ctrl+c 中断当前进程
LINUX文件格式化读写(文件指针,缓冲)的更多相关文章
- 【转】 Linux内核中读写文件数据的方法--不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大 ...
- Android 怎样在linux kernel 中读写文件
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- 【转】在linux内核中读写文件 -- 不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8194276 1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成 ...
- c语言中的文件格式化读写函数fscanf和fprintf函数
很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...
- linux下格式化json文件数据
一.使用 python -m json.tool cat test.json | python -m json.tool 二.jq格式化 在web 2.0时代json这种直观.灵活.高效数据格式基本已 ...
- 文件操作之打开文件与读写文件——C语言
一.fopen 函数原型:FILE *fopen( const char *filename, const char *mode ); 返回值:返回值类型为FILE *,打开文件成功返回指向打开文件的 ...
- C#文件流读写文件的简单winform实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- python之文件的读写和文件目录以及文件夹的操作实现代码
这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...
- Python读写文件实际操作的五大步骤
Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Pytho ...
随机推荐
- MVC5 一套Action的登录控制流程
流程: 用拦截器控制每一个页面请求和ajax请求,根据请求体的cookie里面是否有token判断是否登录,还必须判断该token在redis里面的缓存是否存在 组成部分: 拦截器: using Sy ...
- swift设计模式学习 - 策略模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...
- [Redis] - 高并发下Redis缓存穿透解决
高并发情况下,可能都要访问数据库,因为同时访问的方法,这时需要加入同步锁,当其中一个缓存获取后,其它的就要通过缓存获取数据. 方法一: 在方法上加上同步锁 synchronized //加同步锁,解决 ...
- DBMS 数据库管理系统 DataBase Management System
- iBatis的基本配置+CRUD操作
首先解释一下CRUD的含义:CRUD是指在做计算处理时的增加(Create).查询(Retrieve)(重新得到数据).更新(Update)和删除(Delete) 基本的数据库操作 创建工程iBati ...
- Windows10中注册 regsvr32 xxx.ocx报错but the call to DIIRegisterServer failed with error code 0x80040200
网站中有读取居民身份证的机器,需要安装一些注册activeX控件然后进入指定目录下执行以下命令regsvr32 xxx.ocx报了个错: but the call to DIIRegisterServ ...
- 简单了解SQL(结构化查询语言)
简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...
- ORA-01940:无法删除当前已连接的用户
当时时间比较着急,直接采取了釜底抽薪的办法——拔网线,这招很管用,再次执行drop user就成功了.考虑到以后不一定所有场合都允许你采取这种简单粗暴的办法,就在虚拟机上重现了这个报错,寻求一种较为温 ...
- django查询操作
查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下 ...
- VS 常见快捷键有哪些
自动对齐点[编辑]-[高级]-[设置选定内容的格式]或者按Ctrl + K 然后再按Ctrl + F 就好了 你可以在常用快捷键自定义 窗口中进行查看1.进入工具-选项 对话框2.选择[环境]-[键盘 ...