免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 823 | 回复: 0
打印 上一主题 下一主题

标准I/O操作函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-25 19:36 |只看该作者 |倒序浏览

                                从文件编码方式看,分文本文件和二进制文件.
文本文件操作:
1.文件打开函数fopen():原型是
               
               
                FILE  *fopen(const  char *path,const  char *mode);
path --表示文件名和路径名,可以是绝对路径,也可以是相对路径。
    比如:fp=fopen("/tmp/file","r+");
                fp=fopen("./../file","w+");
mode--打开方式.由r(read),w(write),a(append),t(text),b(banary),+六个字符组成
对于UNIX系统,t和b没有区分,用那个都一样,也可以不写其他的有6中组合
“r”=只读,文件必须存在;
“w”=只写,若文件不存在则创建之,已存在则清空内容再写;
"a"=只能追加数据,文件不存在就创建之;
"r+"=允许读和写,文件必须存在;
"w+"=读和写,文件不存在则创建,存在就清空再写;
"a+"=读和追加数据,文件不存在就创建;
打开如果出错,fopen 将返回一个空指针值 NULL,注意要加打开是否成功判断。
if((fp=fopen("../file","r"))==NULL)
{
        perror("failed to open ../file");
        exit(1);
}
fopen里的所谓当前目录是指:进程工作时的目录
2.文件关闭函数fclose()
文件使用完,最好是要关闭,原型是
int fclose(FILE *fp);
fclose与fopen配对调用。
3.出错处理函数perror()
C标准库和UNIX  C库的很多系统函数在错误返回时将错误原因记录在一个全局变量errno中,一般用函数perror()将errno解释成字符串输出。原型:

void  perror(const  char *s);
每次调用系统函数错误返回后,要马上检查错误原因,perror()只处理最近一次错误产生的errno.
4.字符读写函数fgetc()/fputc() 原型:
int  fgetc(FILE *stream);
int  fputc(int c,FILE *stream);
在fgetc函数中,文件必须是可读的。fgetc返回的是一个字符(char型)。每读一个字符,自动向后移动一个字节。但申明的是int,这是指该字符的ASCII码。
fputc输入的也是字符c的ASCII码。
5.字符串读写函数fgets()/fputs() 原型:
char *fgets(char *s,int size,FILE *stream);
int fputs(const char*s,FILE *stream);
fgets中, s是缓冲区首地址,size是缓冲区长度,fgets从stream中一次最多读取以'\n'结尾的一行到s中。并且在末尾自动添加一个'\0';
fputs中,s是以'\0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'\0'.fputs不需要以'\n'结尾。
               
                 /***************************************
  2  *复制文本文件file1的内容到file2
  3  *     2009.3.25    yunbo03
  4  **************************************/
  5 #includestdio.h>
  6 #includestdlib.h>
  7 #includeerrno.h>
  8
  9 int main(void)
10 {
11     FILE *fp1,*fp2;
12     char ss[512];
13
14     if((fp1=fopen("file1","r"))==NULL){
15         perror("fail to open file1");
16         exit(1);
17     }
18
19     if((fp2=fopen("file2","a+"))==NULL){
20         perror("fail to open file2");
21         exit(1);
22     }
23
24     for(;fgets(ss,10,fp1)!=NULL;)
25         fputs(ss,fp2);
26
27         fclose(fp1);
28         fclose(fp2);
29
30     return 0;
31 }
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87996/showart_1879484.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP