注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

Linux下文件读写操作  

2013-08-12 14:05:37|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
//轉 linux.sir
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>

FILE * openfile(const char *pf);
void readfile(FILE *fp);
void filefgetc(FILE *fp);
void filegetc(FILE *fp);
void filefscanf(FILE *fp);
void filefwrite(FILE *fp);
void filefprintf(FILE *fp);
void filefgets(FILE *fp);
void filefputs(FILE *fp);

int main(int argc, char * argv[])
{
if(argc<2)
{
printf("请输入文件名\n");
exit(-1);
}
FILE *fp = openfile(argv[1]);
readfile(fp);
filefgetc(fp);
filegetc(fp);
filefscanf(fp);
filefwrite(fp);
filefprintf(fp);
filefgets(fp);
filefputs(fp);
}

FILE * openfile(const char *pf)
{
FILE *f;
if ((f = fopen(pf, "w")) == NULL)
{
printf("open error for %m\n", errno);
exit(1);
}
printf("open success\n ");
return f;
}

void readfile(FILE *fp)
{
char buf[512];
if (fread(buf, 1,512,fp) < 1)
{
printf("read error for %m\n", errno);
exit(1);
}
printf("read:%s\n", buf);
}

void filefgetc(FILE *fp)
{
char b;
b=fgetc(fp);
//逐个字符读取
while(b!=EOF)
{
printf("%c", b);
b=fgetc(fp);
}
}

void filegetc(FILE *fp)
{
char b;
b = getc(fp);
while(b!=EOF)
{
printf("%c", b);
b = getc(fp);
}
}

void filefscanf(FILE *fp)
{
char buf[512];
int r = fscanf(fp,"%s" , buf); //读字符串时,遇空格停止
printf("%s", buf);
}

void filefwrite(FILE *fp)
{
char buf[512]="hello fwrite";
if (fwrite(buf, 1, 512, fp) < 1)
{
printf("fwrite error for %m\n", errno);
exit(1);
}
}

void filefprintf(FILE *fp)
{
char *str="tianjin magcuiai";
//注意 fp的打开方式是w类型的,而不能是a+方式
fprintf(fp, "%s", str);
fflush(fp);
if (fclose(fp) != 0)
{
printf("%m", errno);
exit(1);
}
}

void filefgets(FILE *fp)
{
char buf[512];
fgets(buf, sizeof(buf), fp);
printf("fgets----%s", buf);
}

void filefputs(FILE *fp)
{
char *str="hello world!";
fputs(str, fp);
fflush(fp);
fclose(fp);
}

C标准库函数其实质也是调用底层的系统调用,在内核中驱动相关硬件写入磁盘的,但它也有它的优势,一是可移植性强,二是标准库为每个打开的文件 都配备了一个缓冲区,以提高读写的效率,大多数的文件操作都是在缓冲区里完成的,以fgets()和fputs()为例,如下图所示:

每当缓冲区满时,才会写入或读取一次磁盘。

  评论这张
 
阅读(561)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017