Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2970402
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: LINUX

2009-04-12 22:16:45

        C库函数的文件操作实际上是独立于具体的操作系统平台的,不管是DOSWindowsLinuxVxworks中都是这些函数。

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系统,tb没有区分,用那个都一样,也可以不写其他的有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);

fclosefopen配对调用。
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
输入的也是字符cASCII码。
5.
字符串读写函数fgets()/fputs() 原型:

char *fgets(char *s,int size,FILE *stream);
int fputs(const char*s,FILE *stream);

fgets中, s是缓冲区首地址,size是缓冲区长度,fgetsstream中一次最多读取以'\n'结尾的一行到s中。并且在末尾自动添加一个'\0';
fputs
中,s是以'\0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'\0'.fputs不需要以'\n'结尾。

/***************************************
  2 *
复制文本文件file1的内容到file2
  3 * 2009.3.25 yunbo03
  4 **************************************/

  5
#include<stdio.h> //头文件在linux系统 /usr/include/
  6
#include<stdlib.h>
  7
#include<errno.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
}

 

 

 

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