码迷,mamicode.com
首页 > 系统相关 > 详细

Linux - 标准I/O库与高级I/O库

时间:2015-05-13 16:58:15      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:标准   字符      原型   标准与高级i-o库   

输入字符

头文件
#include <stdio.h>
函数原型
int fgetc(FILE *fp);
从文件流中读取下一个字节,并作为字符返回
到达文件尾或出现错误时,返回EOF
int getc(FILE *fp);
与fgetc()功能类似,但可实现成一个宏
int getchar(void);
相当于getc(stdin)

输出字符

头文件
#include <stdio.h>
函数原型
int fputc(int c, FILE *fp);
向输出文件流写入一个字符
int putc(int c, FILE *fp);
int putchar(int c);
相当于putc(c, stdout)
返回值
成功时返回写入的字符
否则返回-1
头文件
#include <stdio.h>
函数原型
char *fgets(char *s, int size, FILE *stream);
最多读取size-1个字符,并保存在s中
遇到EOF或者新行时读操作结束
‘\0’保存在s的末尾
char *gets(char *s);
类似fgets(),但从标准输入读取数据并丢弃遇到的换行符号
返回值
成功返回指向字符串s的指针
失败返回NULL


头文件
#include <stdio.h>
函数原型
int fputs(const char *s, FILE *stream);
int puts(const char *s);

字符串读写操作示例

#include<stdio.h>
main(){   
    FILE  *fp;
    char  string[81];
    if((fp=fopen("file.txt","w"))==NULL){
       printf("cann‘t open file");exit(0); 
    }
     while(strlen(gets(string))>0) {
         fputs(string,fp);
         fputs("\n",fp);
    }
fclose(fp);
    if((fp=fopen("file.txt","r"))==NULL){
       printf("cann‘t open file");
       exit(0); 
    }
    while(fgets(string,81,fp)!=NULL)
       puts(string);
    fclose(fp);
}

格式化I/O

获取外部数据函数
头文件
#include <stdio.h>
函数原型
int  fprintf(FILE  *fp, const char  *format, …)
int  fscanf(FILE  *fp, const char  *format, …)
功能
按格式对文件进行I/O操作
返值
成功,返回I/O的个数
出错或文件尾,返回EOF

格式化I/O用法示例

#include <stdio.h>
main(){ 
   char s[80],c[80];
   int a,b;
   FILE *fp;
   if((fp=fopen("test","w"))==NULL) {   
       puts("can‘t open file");   
       exit() ;   
    }
scanf("%s%d",s,&a); 
    fprintf(fp,"%s  %d",s,a);   
    fclose(fp);
    if((fp=fopen("test","r"))==NULL){   
       puts(“can‘t open file”); 
       exit();   
    }
    fscanf(fp,"%s%d",c,&b);
    printf("%s %d",c,b); 
    fclose(fp);
}

流文件的输入/输出

功能
读/写数据块
头文件
#include <stdio.h>
函数原型
size_t fread(void * buffer, size_t size, size_t count, FILE *fp);
size fwrite(const void * buffer, size_t size, size_t count, FILE *fp);
参数说明
buffer:  指向要输入/输出数据块的首地址的指针
size:  每个要读/写的数据块的大小(字节数)
count:   要读/写的数据块的个数
fp:    要读/写的文件指针
freadfwrite 主要用于二进制文件的输入/输出
返值
成功,返回读/写的块数
出错或文件尾,返回0
float  f[2];
      FILE  *fp;
      fp=fopen(“aa.dat”,“rb”);
      fread(f,4,2,fp);

for(i=0;i<2;i++)
    { 
       fread(&f[i],4,1,fp);
       f[i]+=10;
    }

例   struct  student
      {    
           int num;
           char  name[20];
           char sex;
           int age;
           float  score[3];
      }stud[10];
     for(i=0;i<10;i++)
          fread(&stud[i],sizeof(struct  student),1,fp);

流文件的输入/输出示例

void display()
{   
     FILE *fp;
     int  i;
     if((fp=fopen("d:\\fengyi\\exe\\stu_dat","rb"))==NULL)
     {    
           printf("cannot open file\n");
           return;
     }
     for(i=0;i<SIZE;i++)
     {   
         fread(&stud[i],sizeof(struct student_type),1,fp);
         printf("%-10s %4d %4d %-15s\n",stud[i].name,
                 stud[i].num,stud[i].age,stud[i].addr);
     }
     fclose(fp);
}

#include <stdio.h>
#define SIZE 4
struct student_type
{   
     char name[10];
     int num;
     int age;
     char addr[15];
}stud[SIZE];
main()
{
     int i;
     for(i=0;i<SIZE;i++)
    scanf("%s%d%d%s",stud[i].name,&stud[i].num,
             &stud[i].age,stud[i].addr);
     save();
     display();
}

文件定位

文件的定位
文件位置指针—–指向当前读写位置的指针
读写方式
顺序读写:每次均以上次读或写入后的下一位置作为本次读或写的起点
随机读写:位置指针按需要移动到任意位置
rewind函数
函数原型
void rewind(FILE *fp)
功能
重置文件位置指针到文件开头
返值

文件定位示例

#include <stdio.h>
main()
{   
    FILE *fp1,*fp2;
    fp1=fopen("d:\\fengyi\\bkc\\ch12_4.c","r");
    fp2=fopen("d:\\fengyi\\bkc\\ch12_41.c","w");
    while(!feof(fp1))  putchar(getc(fp1));
    rewind(fp1);
    while(!feof(fp1))  putc(getc(fp1),fp2);
    fclose(fp1);
    fclose(fp2);
}

fseek函数

函数原型: int fseek(FILE *fp,long offset,int whence)
功能:改变文件位置指针的位置
返值:成功,返回0;失败,返回非0值
ftell函数
函数原型
long ftell(FILE *fp)
功能:返回位置指针当前位置(用相对文件开头的位移量表示)
返值:成功,返回当前位置指针位置;失败,返回-1L

main()
{   
    int i;
    FILE *fp;
    if((fp=fopen("studat","rb"))==NULL)
    {   printf("can‘t open file\n");exit(0);   }
    scanf(“%d”, &i );
    fseek(fp,i*sizeof(struct student_type),0);
    fread(&stud,sizeof(struct student_type),1,fp);
    printf("%s  %d  %d  %s\n",
           stud.name,stud.num,stud.age,stud.addr);
    fclose(fp);
}

ferror()函数

ferror()函数
函数原型: int ferror(FILE *fp)
功能:测试文件是否出现错误
返值:未出错,0;出错,非0
说明
每次调用文件输入输出函数,均产生一个新的ferror()函数值,所以应及时测试
fopen()打开文件时,ferror()函数初值自动置为0
clearerr()函数
函数原型: void clearerr(FILE *fp)
功能:使文件错误标志置为0
返值:无
说明
出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数

#include <stdio.h>
int  main(void)
{    
    FILE *stream;
    stream = fopen("DUMMY.FIL", "w");
   getc(stream);
   if (ferror(stream))
   {  
      printf("Error reading from DUMMY.FIL\n");
      clearerr(stream);
   }
   if(!ferror(stream))
       printf("Error indicator cleared!");
   fclose(stream);
   return 0;
}

文件流缓存操作

缓存分类
块缓存
行缓存
无缓存
相关函数
头文件
#include <stdio.h>
函数原型
void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
_IOFBF:块缓存
_IOLBF:行缓存
_IONBF:无缓存

流与文件描述符

确定流使用的底层文件描述符
#include <stdio.h>
int fileno(FILE *fp);
根据已打开的文件描述符创建一个流
#include <stdio.h>
FILE *fdopen(int filedes, const char *mode);

临时文件

创建临时文件
头文件
#include <stdio.h>
函数原型
FILE *tmpfile(void);
返回值
成功为文件指针
出错为NULL
为临时文件创建一个文件名
头文件
#include <stdio.h>
函数原型
char *tmpnam(char *s);
返回值
指向唯一路径名的指针

fcntl()函数

功能
操纵文件描述符
如复制、获取/设置文件描述符标志,获取/设置文件状态标志、管理建议文件锁
头文件
#include <unistd.h>
#include <fcntl.h>
函数原型
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
返回值
成功则依赖于cmd
出错返回-1
参数说明
fd:文件描述符
cmd:操作命令
arg:命令使用的参数
lock:同上
cmd参数说明
F_DUPFD:复制文件描述符 
FD_CLOEXEC:设置close-on-exec标志
F_GETFD:读取文件描述符标志 
F_SETFD:设置文件描述符标志 
F_GETFL:读取文件状态标志
F_SETFL:设置文件状态标志
F_GETLK:获取记录锁
F_SETLK :释放记录锁
F_SETLKW:测试记录锁

mmap()函数

功能
mmap将一个文件或者其它对象映射进内存
文件被映射到多个页上
如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零
头文件
#include <sys/mman.h>
函数原型
void *mmap(void *start, size_t length, int prot, int flags, int fildes, off_t off);
返回值
成功执行时,返回被映射区的指针
失败时,mmap()返回MAP_FAILED
参数说明
start:映射区的开始地址
length:映射区的长度
prot:期望的内存保护标志,不能与文件的打开模式冲突,取值类型如下(可通过or运算合理地组合在一起)
PROT_EXEC //页内容可以被执行
PROT_READ  //页内容可以被读取
PROT_WRITE //页可以被写入
PROT_NONE  //页不可访问
flags:控制变化如何影响映射区
MAP_PRIVATE:映射区的写入不会影响到原文件 
MAP_SHARED:映射区变化对文件有效
MAP_FIXED:使用指定的映射起始地址 

msync()函数

功能
把映像的文件写回磁盘,或
重新从磁盘中读取文件
头文件
#include <sys/mman.h>
函数原型
int msync(void *addr, size_t len, int flags);
返回值
成功时,返回0
失败时,返回-1
参数说明
addr:更新映射区起始地址
len:更新映射区的长度
flags:控制更新方法
MS_ASYNC:执行异步写操作
MS_SYNC:执行同步写
MS_INVALIDATE:从文件中读回数据

munmap()函数

功能
释放内存映射区 
头文件
#include <sys/mman.h>
函数原型
int munmap(void *addr, size_t len);
返回值
成功执行时,返回0
失败时,返回-1

Linux - 标准I/O库与高级I/O库

标签:标准   字符      原型   标准与高级i-o库   

原文地址:http://blog.csdn.net/wangzi11322/article/details/45692791

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!