读写函数

1、getchar()/putchar()

【原   型】int getchar (void);  /  intfputchar(char c);

【返回值】读取/写入字符成功则函数返回值为该字符的ASIIC值,不成功则返回值为EOF。

   getchar() <==>getc(stdin);      putchar(char ch) <==>putc(char ch,stdout);

2、getc()/putc() 与fgetc()/fputc()

【头文件】#include <stdio.h>

【原   型】int fgetc ( FILE * stream );  /  int fputc(char ch, FILE* fp);  

     int getc(FILE * stream);  /  int putc(char ch, FILE* fp);

【功   能】从流中取单个字符 / 写入一字符到指定流  

【参   数】参数*steam为要从中读取/写入字符的文件流;ch为要写入流中的字符。

【返回值】读取/写入字符成功则函数返回值为该字符的ASIIC值,不成功则返回值为EOF。

【说   明】getc()/putc()与fgetc()/fputc作用相同,但在某些库中getc()/putc()为宏定义,而非真正的函数。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void){
    int ch, len, i = 0;
    FILE* fstream;
    char msg[100] = "Hello!I have read this file.";
    fstream=fopen("test.txt","at+");
    if(fstream==NULL){
        printf("read file test.txt failed!\n");
        exit(1);
    }
    while( (ch = getc(fstream))!=EOF){     /*getc从文件流中读取字符*/
        putchar(ch);
    }
    putchar(‘\n‘);
    len = strlen(msg);
    while(len>0){        /*循环写入*/
        putc(msg[i],fstream);
        putchar(msg[i]);
        len--;
        i++;
    }
    fclose(fstream);
    return 0;
}

3、gets()/puts() 与fgets()/fputs()

【头文件】#include <stdio.h>

【原   型】char* fgets ( char *str, int size, FILE *fp );  /  int fputs(const char *str, FILE *fp);  

     cahr* gets(char *str);  /  int puts(const char *str);

【功   能】

char* gets(char *str);  

从stdin流中读取字符串,直至接受到换行符或EOF时停止,将读取的结果存放在str指针所指向的字符数组中。(不读取换行符,最后自动添加一个‘\0‘。,并由此来结束字符串。)

注意:

1. gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用 fgets ( buf, size, stdin )来替换gets()(在linux下,程序中用gets(),编译会有warning: the `gets‘ function is dangerous and should not be used)。

2. gets函数可以接收空格,scanf()不能接受空格。

int puts(const char *str);

puts()函数用来向标准输出设备(屏幕)写字符串并换行;注意:puts在输出字符串后自动换行(自动加‘\n’)。

例1:char a[5]="test"; puts(a);

例2:puts("Hello,C:");   与   printf("Hello,C:\n");    两者实现结果相同。

char* fgets ( char *str, int size, FILE *fp );

从fp指定的文件中读取size-1个字符到str指向的字符数组中。fgets函数读到‘\n’停止,并读取‘\n’字符,读完后再末尾自动加‘\0’字符。fget函数读取字符无需担心超出str置想的数组空间大小问题,它会根据数组的大小自动停止读取(当读到size-1个时停止,末尾加‘\0’)。一般用fgets ( buf, size, stdin )从键盘读取字符,推荐使用!!!

int fputs(const char *str, FILE *fp);

将Str所指向的字符串写入到fp中,字符串结束标志‘\0’不写入。str可以是字符串数组名,或者是字符串指针。

【返回值】gets()和fgets()成功返回str,出错或者读到了末尾返回NULL。

     fputs()和puts成功返回非负数,不成功则返回值为EOF。

4、fscanf()/fpintf() 

【头文件】#include <stdio.h>

【原   型】int fscanf(FILE * stream, const char *format, ...);

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

【功   能】fscanf()会自参数stream 的文件流中读取字符串, 再根据参数format 字符串来转换并格式化数据。格式转换形式请参考scanf(). 转换后的结构存于对应的参数内。 

     fprintf()会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束(‘\0‘)为止。 

【返回值】成功则返回输入/输出的字符个数, 失败则返回-1, 错误原因存于errno 中。

#include <stdio.h>
int main(void){
    int i = 150, j = -100;
    double k = 3.14159;
    fprintf(stdout, "%d %f %x \n", j, k, i);
    fprintf(stdout, "%2d %*d\n", i, 2, i);  //这里中间的%*d <==> %2d,*被后面的2代替。
    return 0;
}
执行:
-100 3.141590 96
150 150
#include <stdio.h>
int main(void){
    int i;
    unsigned int j;
    char s[5];
    fscanf(stdin, "%d %x %5[a-z] %*s %f", &i, &j, s, s);  /*%5[a-z]:表示只接受5个a到z中的字符,%*s:表示跳过下一个字输入的符串*/
    printf("%d %d %s \n", i, j, s);
}
执行:
10 0x1b aaaaaaaaa bbbbbbbbbb //从键盘输入
10 27 aaaaa

5、fread()/fwrite() 

【原   型】size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

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

【功   能】fread()从stream读取nitems个长度为size的数据到ptr所指向的缓冲区中。返回值是成功读到缓冲区中的记录个数。

     fwrite()从ptr指向的缓冲区中读取nitems个长度为size到数据,并把它们写到stream所对应的文件中。

【说   明】stream为用fopen函数返回的文件结构指针。

#include <stdio.h>
#include <stdlib.h>
int main(void){
    int data = 0;
    FILE *p_fin = NULL;
    FILE *p_fout = NULL;
    p_fin = fopen("file_in.txt", "r");    //以只读方式打开数据文件
  if(NULL == p_fin){
    printf("error");
    exit(-1);
  }
    p_fout = fopen("file_out.txt", "w");     //以只写方式打开复制的新文件
    if(NULL == p_fout){
   printf("error");
   exit(-1);
  }  int r = 0;
    while((r = fread(&data, sizeof(char), 1, p_fin)))  //读数据
        fwrite(&data, sizeof(char), r, p_fout);  //写数据
    //关闭文件流
    fclose(pfin);
    fclose(pfout);
    return 0;
}  

6、read()/write() 

时间: 2024-10-06 10:32:41

读写函数的相关文章

使用完整读写函数的网络应用程序

使用完整读写函数的网络应用程序 Linux的设计原则是将硬件设备抽象成文件,用户可以像操作文件一样操作设备,前边已经说过,我们可以使用文件操作函数操作套接字. 使用read函数读取套接字另一端发送过来的内容,使用write函数也可以向套接字另一端发送内容.但是,在网络环境中有一个很大的问题就是延时的问题,对于本地文件夹来说,字节流在本地传输的延时可以忽略不计,但是网络环境中传输延时可能会很长造成I/O阻塞.其次,网络应用程序要能够处理因为中断或者网络连接等问题造成的读写操作异常返回. 对于第一个

「C语言」文件的概念与简单数据流的读写函数

写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实,就算不懂得链表,也完全可以学习”文件“相关知识点,但在此之前最好有”指针“基础. 本篇文章整理自<C语言程序设计教程--人民邮电出版社>第十二章——文件,以作文件探讨. 一.数据流与文件概念 二.文件的打开与关闭 三.文件的顺序读写 四.文件的随机读写 一.数据流与文件概念 1.数据流 数据的输入

(转载)C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind

http://blog.sina.com.cn/s/blog_61437b3b0102v0bt.html http://blog.csdn.net/chenwk891/article/details/8776479 在C\C++中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的用法: (1)fopen()函数:打开文件 包含头文件:#include 格式:FILE * fopen(const char * path,const char * mode)

Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】

转自:http://blog.chinaunix.net/uid-20937170-id-3033633.html 学习了驱动程序的设计,感觉在学习驱动的同时学习linux内核,也是很不错的过程哦,做了几个实验,该做一些总结,只有不停的作总结才能印象深刻. 我的平台是虚拟机,fedora14,内核版本为2.6.38.1.其中较之前的版本存在较大的差别,具体的实现已经在上一次总结中给出了.今天主要总结的是ioctl和堵塞读写函数的实现. 一.ioctl函数的实现 首先说明在2.6.36以后ioct

文件读写函数

字符读写函数:    fgetc / fputc字符串读写函数:fputs / fgets格式化读写函数:fscanf / fprintf二进制读写函数:fread / fwrite其他相关函数:检测文件结尾函数feof检测文件读写出错函数ferror清除末尾标志和出错标志函数clearerr文件定位的函数fseek 字符读写函数fgetc和fputc while( !feof( fp1 ) ){ c = fgetc( fp1 ); fputc(c, fp2); } 函数fputc( )    

bmp格式图像的读写函数(对一个开源代码的封装)

在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像. 前提 我们不需要知道这段代码是如何读取bmp格式图像的,不需要知道bmp格式的图像时如何存储的,我们只需要知道有三个参数可以确定图像的尺寸大小,他们是图像的宽度.高度.通道数(例如灰度图像有一个通道,rgb图像有三个通道(rgb)).图像包含高度X宽度个像素,每个像素有相同的通道,他们在内存中按照一定的顺序存储,例如三通道bmp图像,在内存中

Linux C,文件读写函数

C标准库提供的用于读写文件的函数非常多,大多数函数都在stdio.h中声明. fread/fwrite,fgets/fputs,fgetchar/fputchar,fprintf/fscanf............. 这些函数原型声明都在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

Python-Day3 Python基础进阶之集和/文件读写/函数

一.集和 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 1.创建集合 >>> s = set([3,5,9,10]) #创建一个数值集合 >>> t = set("Hello") #创建一个唯一字符的集合 >>> s {9, 10, 3, 5} >>> t {'e', 'H', 'l', 'o'} #集和自动去重

C文件读写函数介绍(转)

1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针. 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串 含义 "r" 以只读方式打开文件 "w" 以只写方式打开文件 "a" 以追加方式打开文件 "r+"

读写函数(三)

一旦我们建立了连接,我们的下一步就是进行通信了.在Linux下面把我们前面建立的通道 看成是文件描述符,这样服务器端和客户端进行通信时候,只要往文件描述符里面读写东西了. 就象我们往文件读写一样. 写函数write ssize_t write(int fd,const void *buf,size_t nbytes) write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文件描述符写时有俩种可