日期:2014-05-16  浏览次数:20663 次

linux C库函数(一)

linux C库函数(一)
2010年01月26日
  C库函数的文件操作实际上是独立于具体的操作系统平台的,不管是DOS、Windows、Linux、Vxworks中都是这些函数。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() 原型:[b]
  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 #include [b]//
头文件在linux系统 /usr/include/
  6 #include
  7 #include
  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 }
  
[/b][/b]