Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59976
  • 博文数量: 16
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 20:05
文章分类
文章存档

2008年(16)

我的朋友

分类: LINUX

2008-03-06 16:44:31

linux编程文件操作

标准I/O库
这个部分比较常见的函数有
fopen.fclose
fread,fwrite
fflush
fgets,gets
printf,fprintf,sprintf
scanf,fscanf,sscanf
这些个函数都包含在头文件stdio.h里面

用一个程序来解释部分函数的使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char line[64];
    char property[16],value[16];
    FILE *file;
    
    if((file=fopen("ab","r"))==NULL)
    {
        perror("can,t open");
        exit(1);
    }
    while(fgets(line,128,file)!=NULL)//fgets remove the \n in each line ,butadd a NULL point

    {
        sscanf(line,"read%s %s",property,value);//%s会在出现的第一个空格后停下,会忽略文件里read后面的空格数

        printf("%d,%d\n",strlen(property),strlen(value));
        printf("%s=%s\n",property,value);
        printf("at %ld",ftell(file));//输出当前文件的便宜位置

    }
    fclose(file);
    return 0;
}




ab文件的内容为
one 1
two 2
three 3

首先是fopen函数,FILE *fopen(const char *filename,const char *mode);
r  只读
w  写
a  追加到文件末尾,即append
如果文件打开成功就返回FILE指针,如果失败就返回NULL。

fclose  关闭指定的文件流了
int fclose(File *stream)
当调用这个函数的时候,如果有还没有写出的数据,则该函数会调用fflush(FILE *stream)写出,stdio库会对数据缓冲。
可用的文件流数目是有限制的,这个限制在stdio.h里的FOPEN_MAX定义,因此即时的关闭文件流是很有必要的。

char *fgets(char *s,int n,File *stream),从相应的文件流中读取一行,如果还未读取到文件结尾,则会删除换行符,追加一个空字节,如果已经到了文件结尾或者已经读取了n-1个字节,则会把换行符加上。

sscanf fscanf scanf非常类似,区别只是数据的获取地方不一样,sscanf是在char数组中,fscanf是在文件流中,scanf是在标准输入中,使用方法类似。
int scanf(const char *format, ...);
int fscanf(FILE *stream,const char *format, ...);
int sscanf(const char *s,const char *format, ...);

print,fprint,sprintf也是非常类似,不多加介绍。

ftell(FILE *stream)返回文件当前的读写位置的便宜值。

这个部分其实就是C语言编程,应该已经非常的熟悉了。

最后还有个文件流的错误处理
文件操作的错误表示都会保存在errno.h的errno里,可以通过以下函数操纵。
int ferror(FILE *stream) 测试文件流的错误标识是否被设置。
int feof(FILE *stream) 测试文件流的文件尾标识。
void clearerr(FILE *stream) 清除文件流尾表示和错误表示

 

阅读(1189) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-01-15 13:45:02

:)恩,不错,继续努力