文件输入输出总结

1 基于文件指针的数据读写

基于文件指针的数据读写,通常为标准函数,在Windows与Linux下,均可以使用。

数据块读写

NAME
       fread, fwrite - binary stream input/output

SYNOPSIS
       #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);
DESCRIPTION
       The  function  fread()  reads  nmemb  elements of data, each size bytes
       long, from the stream pointed to by stream, storing them at  the  loca-
       tion given by ptr.

       The  function  fwrite()  writes nmemb elements of data, each size bytes
       long, to the stream pointed to by stream, obtaining them from the loca-
       tion given by ptr.
RETURN VALUE
       fread()  and  fwrite()  return the number of items successfully read or
       written (i.e., not the number of characters).  If an error  occurs,  or
       the  end-of-file is reached, the return value is a short item count (or
       zero).

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

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

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

字符串读写

 
SYNOPSIS 
       #include <stdio.h>
       char *fgets(char *s, int size, FILE *stream);
       int fputs(const char *s, FILE *stream);

       char *gets(char *s);             ?          等同于 fgets(const char *s, int size, stdin);
       int puts(const char *s);                     等同于 fputs(const char *s, int size, stdout);
 
DESCRIPTION
       fgets()  reads  in  at most one less than size characters from stream and stores them
       into the buffer pointed to by s.  Reading stops after an EOF or a newline.  If a new-
       line  is read, it is stored into the buffer.  A ‘\0‘ is stored after the last charac-
       ter in the buffer.

       gets()  reads a line from stdin into the buffer pointed to by s until either a termi-
       nating newline or EOF, which it replaces with ‘\0‘.  No check for buffer  overrun  is
       performed (see BUGS below).

       fputs() writes the string s to stream, without its trailing ‘\0‘.

       puts() writes the string s and a trailing newline to stdout.

gets()会忽略‘\n‘,如果程序一执行,就按enter的话,字符串中存的就是‘\0‘。遇到错误或到文件结尾,返回NULL。

puts()会把‘\0‘换成\n输出。遇到错误返回EOF。

fgets()返回数组首地址,‘\n‘也存上,再加个‘\0‘,遇到文件结尾返回NULL。遇到错误或到文件结尾,返回NULL。

fputs不会在行尾自动添加换行符。遇到错误返回EOF。

注意:从文件中读字符串,末尾都是会自动添加’\0’d的。

RETURN VALUE
       puts() and fputs() return a non-negative number on success, or EOF on error.

       gets() and fgets() return s on success, and NULL on error or when end of file  occurs
       while no characters have been read.

格式化读写

SYNOPSIS 
       #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, ...);
       int sscanf(char *str, const char *format, …);

以f开头的将格式化后的字符串写入到文件流stream中,或者从文件流stream中读取格式化后的字符串

以s开头的将格式化后的字符串写入到字符串str中,或者从字符串str中读取格式化后的字符串

对于写函数,返回写的字符个数(不包括‘\0’),遇到错误返回一个负数。

对于读函数,返回匹配的个数。遇到错误或者到达文件结尾,返回EOF。

注意:对于读函数,匹配字符串时会忽略空格,并且会在结尾加’\0’。

单个字符读写

RETURN VALUE
       fgetc(),  getc()  and getchar() return the character read as an unsigned char cast to
       an int or EOF on end of file or error.

       fputc(),  putc()  and putchar() return the character written as an unsigned char cast
       to an int or EOF on error.

       puts() and fputs() return a non-negative number on success, or EOF on error.

2 基于文件描述符的数据读写

read与write函数是Linux系统调用,仅仅用于Linux系统。非缓冲。

注意

针对管道,read的返回值有如下3种情况:

1. 读取正常,返回读到的字符个数

2. 对方写端关闭,read返回0

3. 自己的读端关闭,read出错,返回-1。

NAME
       read - read from a file descriptor

SYNOPSIS
       #include <unistd.h>

       ssize_t read(int fd, void *buf, size_t count);

DESCRIPTION
       read()  attempts  to  read  up to count bytes from file descriptor fd into the buffer
       starting at buf.

       If count is zero, read() returns zero and has no other results.  If count is  greater
       than SSIZE_MAX, the result is unspecified.

RETURN VALUE
       On  success,  the  number of bytes read is returned (zero indicates end of file), and
       the file position is advanced by this number.  It is not an error if this  number  is
       smaller than the number of bytes requested; this may happen for example because fewer
       bytes are actually available right now (maybe because we were close  to  end-of-file,
       or  because  we  are  reading from a pipe, or from a terminal), or because read() was
       interrupted by a signal.  On error, -1 is returned, and errno is  set  appropriately.
       In this case it is left unspecified whether the file position (if any) changes.
NAME
       write - write to a file descriptor

SYNOPSIS
       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

DESCRIPTION
       write()  writes up to count bytes from the buffer pointed buf to the file referred to
       by the file descriptor fd.

RETURN VALUE
       On success, the number of bytes written is returned (zero indicates nothing was writ-
       ten).  On error, -1 is returned, and errno is set appropriately.
时间: 2024-10-17 23:34:26

文件输入输出总结的相关文章

Python文件输入输出

http://blog.csdn.net/pipisorry/article/details/37769669python文件输入输出教程 python文件中的读入科学计数法的数字 float(word_dist) 皮皮blog python文件读取 内置函数open() 得到一个文件对象(file object):open(filename, mode='r') 函数参数 1. 模式mode: 模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式

【转】acm技巧 使用文件输入输出方便测试的方法

Felix大牛给了一种更简单使用文件输入输出的改进方法,在ACM中应用很广,而且超赞,现在来介绍一下. 这次用到的文件打开函数不再是fopen,而是stdio.h中包含的另一个函数freopen FILE * freopen ( const char * filename, const char * mode, FILE * stream ); [参数说明] filename: 要打开的文件名 mode: 文件打开的模式,和fopen中的模式(r/w)相同 stream: 文件指针,通常使用标准

文件输入输出

文件输入输出的例子 以输出任意一组数的最大最小值,平均值为例 input:2 8 3 5 1 7 3 6 output:1 8 4.375 1重定向式 如果有#define LOCAL的时候执行#ifdef LOCAL 和#endif之间的语句, 没有定义LOCAL的时候不执行: 两个fopen加在main函数入口处,他将使得scanf从文件input.txt读入,printf写入文件output.txt #include <stdio.h>#define LOCAL int main() {

Syetem Verilog 文件输入输出系统任务及函数

[1]文件的打开.关闭 函数: 打开文件 $fopen 关闭文件 $fclose 语法: 打开文件 fd = $fopen(filename, type); 关闭文件 $fclose(fd); 说明: filename 为string类型,指定所需要打开的文件 type为打开文件方式,主要有: "r":以只读方式打开 "w":以写方式打开 "a":append,写入到打开文件的结尾 fd 为打开的文件的文件描述符,对改文件的所有操作通过对fd操作

【足迹C++primer】22、文件输入输出

文件输入输出 使用文件流对象 创建文件流对象时,我们可以提供文件名(可选).如果提供了一个文件名,则open会自动被调用: ifstream in(ifile); //构造一个ifstream并打开给定文件 ofstream out; //输出文件流未关联到任何文件 用fstream代替iostream& 首先这里有一个头文件和一个定义的文件要使用 Sales_data.h #ifndef SALES_DATA_H_INCLUDED #define SALES_DATA_H_INCLUDED #

讨论文件输入输出

输入不超过1000的若干整数,输出最大.最小.平均值: 关键在于,输入数字个数是不确定的 一,利用scanf函数的返回值就是返回输入数字的个数,的,这个特性判断输入终止. #include"iostream" #include"ctime" using namespace std; int main() { int x,n=0,min,max,s=0; while(scanf("%d",&x)==1){ s+=x; if(x<min

python 中文件输入输出及os模块对文件系统的操作

整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2.对打开文件进行读取时,readline()与readlines()的区别在于是否一次性的读取所有的内容,并将每行的信息作为列表中的一个子项. 例如:文件test.txt中 1,3,4 2,35,6 分别用readline与readlines对其进行读取 r=file_object.readline(

利用数组的的文件输入输出

利用数组的文件输入输出 1. 将数组以二进制格式保存到磁盘 np.save和np.load是读写磁盘数组数据的两个主要函数.默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的. import numpy as np arr=np.arange(10) np.save('some_array',arr) 如果文件路径末尾没有扩展名.npy,则该扩展名会自动加上.然后就可以通过np.load读取磁盘上数组: print(np.load('some_array.npy')) #

LibreOJ #3.Copycat 文件输入输出

题目描述 这道题用于测试文件输入输出,请注意使用文件输入输出,而非标准输入输出. 输入一个正整数 aa,输出这个数 aa. 输入格式 第一行一个正整数 TT,表示有 TT 组测试数据.接下来 TT 行,每行一个正整数 aa. 输出格式 输出 TT 行,每行一个正整数 aa. 样例 样例输入 1 3 1 2 3 样例输出 1 1 2 3 样例输入 2 1 1000000000000000000000000000000000 样例输出 2 100000000000000000000000000000

c语言 格式化文件输入输出

已经对普通的格式化输入输出函数scanf和printf很熟悉了,格式化文件输入输出函数是在两个函数名前加f,表明"读写对象是磁盘文件而不是键盘和显示器". 两个函数的原型为: int fprintf(FILE , const char , -); int fscanf(FILE , const char , -); fprintf和fscanf与普通的printf和scanf用法几乎一致,唯一的不同在于多了第一个参数-文件指针,用以标识输入的源文件或输出的目的文件. 当输入输出正确时,