js333 > 计算机互联网 > 金沙js333娱乐场C语言文件操作函数大全,linux标准

原标题:金沙js333娱乐场C语言文件操作函数大全,linux标准

浏览次数:73 时间:2019-10-07

int main(void)
{
        FILE *p;
        int i=0;
        p=fopen("test10.txt","w+");
        while(i<50000000)
        {
                fputs("test",p);
                i++;
        }

28.setvbuf(设置文件流的缓冲区) 连带函数 setbuffer,setlinebuf,setbuf
表头文件 #include<stdio.h>
定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函数说明在开采文件流后,读取内容后边,调用setvbuf()能够用来设置文件流的缓冲区。参数stream为钦点的文件流,参数buf指向自定的缓冲区开端地址,参数size为缓冲区大小,参数mode有下列二种
_IONBF 无缓冲IO
_IOLBF 以换行为依附的无缓冲IO
_IOFBF 完全无缓冲IO。要是参数buf为NULL指针,则为无缓冲IO。
返回值

复制代码 代码如下:

2)按行读写
   标准函数编制程序库提供了行读写函数,该类函数读取一行以换行符"/n"甘休的多寡,写入数据时自动输出换行符。
   (1)行输入函数族
#include<stdio.h>
char *gets(char *s);
char *fgets(char *s,int n,FILE *stream);
      函数gets从正规输入流(stdin)中读取一串字符存款和储蓄到参数s所指向的内存空间中,文件停止恐怕失实发生时再次来到NULL,不然将赶回参数s所指向的内部存储器地址。
       函数fgets中键入了防溢出调整,它从文件流stream中读取一串字符到参数s所指向的内部存款和储蓄器空间,但读取数据的长短(包含换行符"/n")不可能当先n-1,。参数n代表了字符串s的最大存款和储蓄空间。倘使待读入的实在多少长度包蕴("/n")超越了n-1,函数将截取该n个字符重返,剩余的字符将要下次fgets调用时读入。
       五个函数都把读取的字符音讯存入字符串s中,並且自动扩展字符串甘休符"0",那也是fgets一遍性最四只好读入n-1个字符的因由(第n个字符供给仓库储存停止符"0")。函数调用成功时再次回到参数s的值,即指向输入的字符音信,不然重回空指针NULL。
/*不使用fgets函数的再次回到值*/
char s[1024];
...
fgets(s,sizeof(s),STREAM);
puts(s);
.....
 
 
/*运用fgets函数的重返值*/
char s[1024];
...
puts(fgets(s,sizof(s),STREAM);
....
(2)行输出函数
     规范文件编制程序库中用于文书行输出的函数如下:
#include<stdio.h>
int puts(const char *s);
int fputs(const char *s,FILE *steam);
参数s指向一串以字符串甘休符"0"结尾的字符;函数puts把该字符串(不包含结束符"0")写入到正规输出流stdout中,并自动输出换行符"/n";函数fputs字符串s(不满含甘休符"0")写入文件流stream中,但不再输出换行符"/n"。
     两函数都不出口字符串末的终结符,输出战败时,都返EOF。
     (3)实例:
      深入分析报文文件的另一种办法是先读入一行数据,再通过字符串函数分解。本处设计了一个接纳行读写深入分析报文的例证,程序按行读取文件"/etc /passwd",并将"顾客名称"域提抽取来(报文的率先个域)单独提抽取来,存入文件"copyname.txt"中,源程序如下:
#include<memory.h>
#include<string.h>
#include<stdio.h>
void main()
{
  FILE *fpr, *fpw;
  char buf[1024], *p1,*p2;
  /*以下打开源文件*/
  if((fpr=fopen("/etc/passwd","r"))=NULL)
  {  
    printf("open file /etc/pwasswd failed. /n");
    return ;
  }
  if((fpw=fopen("./copyname.txt"))==NULL)
  {
     printf("open file ./copyname.txt failed./n");
     fclose(fpr);
     return ; 
  } 
  memset(buf,0,sizeof(buf));
  while(fgets(buf,sizeof(buf),fpr)!=NULL)
  {
    /*p1指向第贰个":",p2指向第4个":"*/
    if((p1=strstr(buf,":"))==NULL)break;
    if((p2=strstr(p1+1,":"))==NULL)break;
    p1++;p2++;
    /*p1指向第三个域密码字段,p2指向第一个域客商ID字段*/
    /*以下代码移动字符串内容,将ID字段的内容移动到客商名字段后*/
    while(*p2!=':')
    {
       *p1=*p2;
       p1++;p2++;
    }
    *p1=0;
    /*显示屏输出*/
    puts(buf);
    /*文件输出*/
    fputs(buf,fpw);
    fputs("/n",fpw);
    memset(buf,0,sizeof(buf));
 
  }
  fclose(fpr);
  fclose(fpw);
}
 3)按块读写
    块读写函数,能够输入输出任何数据的字符,在操作二进制文件时平常使用,标准文件编制程序库中用来文书块输入输出的函数如下:
#include<stdio.h>
size_t fread(void *ptr,size_t size,size_t nitems,FILE *stream);
size_t fwrite(const void *ptr,size_t size, size_t nitems,FILE *stream);
   函数fread从文件流stream中读入nitems个数据项存款和储蓄到指针ptr所指向的内部存款和储蓄器中,各类数据项具备size字节大小,叁次操作总共读入size*nitems个字节。
  函数fwrite将ptr的数额写入到stream中,每一遍可写入size*nitems个字符。参数nitems表示写入文件的数量项个数,参数size表示各样数据项具备的字节大小。
 注:在大非常多Unix中,size_t被定义为无符号整形:
 typedef unsigned int size_t;
  fread&fwrite都不回来实际读写的字符个数,而回到的是实际读写的数码项数。成功时,再次来到值等于参数nitems值,不然再次回到值将小于nitems值。
  块I/O函数常应用于二进制文件读写中,操作相比灵敏,不仅能够读写一个字符,也足以读写二个结构,还足以读写放肆数据类型。
/*读写字符*/
char c;
....
fread(&c,sizeof(char),1,INSTREAM);
...
fwrite(&c,sizeof(char),1,OUTSTREAM);
 
 
/*读写结构*/
typedef struct
{
  char c;
  int l;
}MYSTRUCT;
...
MYSTRUCT my;
...
fread(&my,sizeof(MYSTRUCT),1,INSTREAM);
...
fwrite(&my,sizeof(MYSTRUCT),1,OUTSTREAM);
 
/*读写数组*/
double f[5];
...
fread(f,sizeof(double),5,INSTREAM);
...
fwrite(f,sizeof(double),5,OUTSTREAM);
实例
     块读写函数经常操作二进制文件,保留内部存储器消息或恒久存款和储蓄数据消息等。比如在软件中提到一个文件型数据库,用以存取历史交易明细。
    本处设计了壹个存取数据音信的实例,通过文件"array.dat"存款和储蓄和读取叁个整形数组,其普通话件伊始记录数组的长度,随后是数组的数目音讯。源文件如下:
/*多少音信存款和储蓄 wdata.c*/
#include<stdio.h>
void main()
{
  FILE *fp;
  /*data array, readers can modify the lenght  and the context of the array*/
  int narray[5]={3132,2354,45,224,566};
  int all=5;
  if((fp=fopen("array.dat","wb"))==NULL);
  {
     printf("open file array failed./n");
     return ;
  }
  fwrite(&all,sizeof(int),1,fp);
  /*其实写入1*sizeof(int)=4个字符*/
  fwrite(narray,sizeof(int),all,fp);
  /*实在写入all*sizeof(int)个字符*/
  fclose(fp);
 
}
/*数组消息过来rdata.c*/
include<stdio.h>
void main()
{
  FILE *fp;
  int narray[5];
  int all=6,i;
  if((fp=fopen("array.dat","rb"))=NULL);
  {
    printf(open file array.dat failed./n);
    return ;
  } 
  /*读取文件中存款和储蓄的第四个整数,获取存款和储蓄数组的因素数*/
  fread(&all,sizeof(int),1,fp);
/*读取文件存款和储蓄的数组元素*/
  fread(narray,sizeof(int),1,fp);
  printf("all=%d/n",all);
  for(i=0;i<all,i++)
  {
    printf("[%d]=%d",i,narray[i]);
  } 
  printf("/n");
  fclose(fp);
 
}
                         文件的格式化读写
     文件的格式化读写具备数据格式自动转变和文书流输入输出七个进程。输入时,先将文件流中的字符串转化为二进制数据,再存入内部存款和储蓄器中;输出时,先将二进制数据转发为字符串数据,再出口。
   文件格式化输出函数族:
int printf(const char *format, /*[arg,]*/ ...)
int fprintf(FILE *stream, const char *format, /*[arg,]*/...)
int sprintf(char *s, const char *format, /*[arg,]*/...)
sprintf输出结果到字符串s中,同期在字符串末尾自动抬高字符截止符''。那四个函数调用成功时回来实际出口的字符数,否则重回三个负数
    常见类型:
       d,i   以十进制格局出口带符号整数
       u     以十进制方式出口无符号整数
       f     以小数情势输出单、双精度实数
       e,E   以指数情势输出单、双精度实数
       g,G   以%f%e中极短的输出宽度输出单、双精度实数
       x,X   以十六进制方式出口无符号整数,后面一个输出"0123456789abcdef",前者输出"0123456789ABCDEF"
       o     以八进制情势出口无符号整数
       c     输出单个字符
       s     输出字符串
       p     以指针格局出口
    标志:
       -     左对齐输出,左侧填空格
       +     带符号(正号或负号)输出
       空格  输出正数时加多空格,输出负数时增加负号
       #     整型的八进制或十六进制转变时分别出口前缀"0"或"0x";浮点数转变时,省去多余小数
    文件格式化输入函数族:
int scanf(const char *format, /*[pointer,]*/...)
int fscanf(FILE *stream, const char *format, /*[pointer,]*/...)
int sscanf(const char *s, const char *format, /*[pointer,]*/...)
  输入函数能活动过滤输入流中的空格、制表等标识。函数调用成功时回来读入值的参数个数,否则重临EOF。
3:函数的变长参数
  文件的格式化参数都帮忙变长参数。定义时,变长参数列表通过省略号"..."表示,因而,具备变长参数列表的函数定义格式如下:
  type 函数名(参数1,参数2,参数n,...);
里面type为函数的回到值类型,参数1~n为定长参数,...代表变长参数,...必须定义在参数的最右端。如下例:
  int printf(const char * format,...);
  int mysum(...);
1)变长参数的应用
  Unix的变长参数通过va_list对象完毕,定义在文书"stdarg.h"中,变长参数的行使模板代码如下:
#include<stdarg.h>
function(parmN,...)
va_list pvar;
.........
va_start(pvar,parmN);
while()
{
  ........
  f=va_arg(pvar,type);
  ........
}
va_end(pvar);
1 step. va_list pvar
申明va_list数据类型变量pvar,该变量访谈变长参数列表中的参数
2 step. va_start(pvar,parmN)
宏va_start初阶化变长参数列表。pvar是va_list型变量,在step1定义,记载列表中的参数消息。parmN是省略号"..."前的贰个参数名,va_start依据此参数,判别参数列表的最初地点。
3 step: va_arg(pvar,type)
收获变长参数列表中参数的值。pvar是step定义的va_list型变量,type为参数值的品类,也是红va_arg重回数值的门类,如:
va_arg(pvar,int);
va_arg(pvar,float);
宏va_arg实施完成后活动改造对象pvar,将其针对性下一个参数。
4 step:va_end(pvar)
关门此番对变长参数列表的访谈。
设计函数mysum,总计输入参数的和并回到结果,源程序如下:
#include<stdarg.h>
int mysum(int i,...)
{
  int r=0,j=0;
  va_list pvar;
  va_start(pvar,i);
  for(j=0;j<i;++j)
  {
    r +=va_arg(pvar,int);
  }
  va_end(pvar);
  return(r);
}
void main()
{
  printf("sum(1,4)=%d/n",mysum(1,4));
  printf("sum(2,4,8)=%d/n",mysum(2,4,8));
}
compile & run
$make mysum
     cc -O -o mysum mysum.c
$./mysum
sum(1,4)=4;
sum(2,4,8)=12;
4)变长参数的传递
变长参数字传送递的函数族如下:
#include<stdarg.h>
int vprintf(const char *format,va_list ap);
int vfprintf(FILE *stream,const char *format,va_list ap);
int vsprintf(char *str,const char *format,va_list ap);
     那么些函数完全等价于格式化函数,只是在样式上行使一定参数代替变长参数列表,这样描述的函数尤其严格,那些函数长应用于变长参数内部的功力落成。
    完成:设计函数"int PrintLog(FILE *stream,const  char *pformat,...)",它依据字符串format的源委,调整后即参数的数目和格式,并在文书流stream中输出。源程序代码如下:
#include<stdio.h>
#include<stdarg.h>
int PrintLog(FILE *pfile,const char * pformat,...)
{
  va_list _va_list;
  char szbuf[1024];
  if(pformat==null || pfile==null)return -1;/*决断指针是还是不是正确*/
  va_start(_va_list,pformat);/*发轫化变长参数列表*/
  vsprintf(szbuf,pformat,_va_list);/*传送变长参数*/
  va_end(_va_list);
  fputs(szbuf,pfile);
  return 0;
}
 
void main()
{
  PrintLog(stderr,"[%s][%s][%d][%c]/n","This","is",5,'a');
}
4:文件读写地点的原则性
  在事实上行使中,大家平常只需求读取文件中的一小段内容,大概写入一小段呢日啊难怪到文件中,使用文件的读写定位效能可避防止些不供给的的数据段。比方某文 件由一多重永久大小记录块组成,当访谈其第n块记录时,能够先将文件指针移动到第n块记录的起头地方,再拜会1个记录快大小的数额,并无需从文件头开端读取n个记录块。
  规范文件产生库中用于固定文件读写结束的函数如下:
#include<stdio.h>
int fseek(FILE *stream,long int offset,int whence);
void rewind(FILE *stream);
long int ftell(FILE *stream);
个中fseek改动文件流stream中的访谈地点,参数whence表示文件定位的艺术,fseek中提供了二种长久格局,参数offset表明了恒久的偏移量,其值可正可负,与whence一同明确访谈文件的尾声一定。
whence              含义                     文件定位于
SEEK_SET           从文件头开头稳固   0+offset
SEEK_CU奥迪Q5          从前段时间地点上马定点  当前岗位+offset
SEEK_END          从文件尾开端稳固     文件末+offset
rewind重新恢复设置流stream,将文件流定位于文件开始处,也就是推行了以下操作:
void fseek(stream,0L,SEEK_SET);
函数ftell获取文件流的此时此刻职责,调用成功时将该值再次回到,不然再次来到-1。
注:
    大好些个种类中,能够由此以下代码获取文件的尺寸(len)
long len;
fseek(stream,0,SEEK_END);
len=ftell(stream);
实例:
      本处设计了一个文书读写一定的例证,代码如下,个中seekwrite将整数值narray写入文件第"rec*sizeof(int)"处;函数seekread从文件的第"rec*sizeof(int)"位置中读取整数值存入narray.
     尽管一定抢先了文件的最大尺寸且实行了写入操作,文件长度将延伸到当下岗位,中间部分机关补0;
#include<stdio.h>
void seekwrite(FILE *fp,int narray,int rec)/*写入文件第rec个整数*/
{
  fseek(fp,sizeof(int)*rec,SEEK_SET);
  fwrite(&narray,sizeof(int),1,fp);
}
 
void seekread(FILE *fp,int *narray,int rec)
{
  fseek(fp,sizeof(int)*rec,SEEK_SET);
  fread(narray,sizeof(int),1,fp);
 
}
 
void main()
{
  FILE *fp;
  int narray[2]={100,200},narrayr[2];
  if((fp=fopen("seek.dat","w+b"))==NULL)
  {
     printf("open seek.dat failed./n");
     return ;
  }
  seekwrite(fp,narray[0],1);seekwrite(fp,narray[1],10);
  seekread(fp,narrayr,1); seekread(fp,narrayr+1,10);
  printf("now array[0]=%d,array[1]=%d",narrayr[0],narrayr[1]);
  fclose(fp);
}
5:文件的状态
  每二个流对象内部都保持了七个指令状态:错误提醒状态和文书截至状态,函数ferror和feof分别检查这七个情状,函数strerror展现错误的提示消息。
(1)文件的失实与停止状态
#include<stdio.h>
int ferror(FILE *stream);
int feof(FILE *stream);
void clearerr(FILE *stream);
当文件I/O发生错误时,调用ferror函数将回来非0值,不然重临0值。当文件甘休时,调用feof函数再次来到非0值,不然再次回到0值,函数clearerr清除文件漏洞非常多标记和EOF标记。
   实例:
   读取文件"/etc/passwd",当文件甘休时自动退出。
#include<stdio.h>
void main()
{
  FILE *fp;
  char buf[1024];
  if((fp=fopen("/etc/passwd","r"))==NULL)
  {
    printf("open file /etc/passwd failed./n");
    return ;
  }
  while(!feof(fp))
  {
    fgets(buf,sizeof(buf),fp);
    if(feof(fp)) break;
    fputs(buf,stderr);
  }
  fclose(fp);
}
(2)文件的错误新闻
    错误状态指示器仅能推断错误是不是产生,不可能分明错误的剧情,规范文件编制程序库用于鲜明错误新闻的函数如下:
    extern int errno;
    #include<string.h>
    char *strerror(int errnum);
  其中外界变量errno代表了发出错误的代码,函数strerror获取第errnum号错误的详细消息。
6:文件的缓冲
   所谓文件写缓冲,是指文件流在实践输出操作时,并不马上将数据写入文件,而是先把数据累计到缓冲区,再以块为单位批量输出到文件中,同理,文件读缓冲是指 文件流在实践输入操作时,以块为单位读取文件内容,多余的数目存款和储蓄在内存中。假使后一次读操作的内容刚幸而平等块中,则能够直接重临结果,防止三回输入操 作。通过缓冲本事,能够减去低等I/O函数read和write函数的调用次数,进而大大升高软件试行功效。
  1)缓冲格局
   规范文件编制程序库选拔FILE类型描述文件流,与低等I/O函数比较,最大的特点就是应用及增添了缓冲效能(低等I/O函数只行使了文件系统自带的缓冲作用),文件的输入输出以"缓冲块"为单位批量成功,並且依照"缓冲块"大小,提供了两种缓冲形式。
   (1)全缓冲(_IOFBF):一般读写普通磁盘文件采取全缓冲形式。
   (2)行缓冲(_IOLBF):例如调用fgets函数从专门的学业输入流stdin中输入字符,当且仅当客商输入回车换行时,函数才回到。
   (3)无缓冲(_IONBF):譬如stderr采取无缓冲情势;
2)缓冲函数
#include<stdio.h>
void setbuf(FILE *stream,char *buf);
int setvbuf(FILE *stream,char *buf,int type,size_t size);
int fflush(FILE *stream);
 setbuf设置文件流stream的缓冲区,参数buf指向贰个轻重为BUFSIZ的内部存款和储蓄器块,调用成功后,文件流stream使用该内部存款和储蓄器块作为新的缓冲区。假使buf是空指针NULL,文件流stream的缓冲将被统统关闭。缓冲区内存块的概念经常为:
   char buf[BUFSIZ]; ---在那之中BUFSIZ是stdio.h中的常数,代表缓冲区的大大小小,常为256的整几倍。
   setvbuf设置了文本流stream的缓冲区和缓冲方式,缓冲格局由参数type分明.
   任曾几何时候,都足以使用fflush刷新缓冲区,并将缓冲区的内容强制输出到文件中,参数stream指明了翻新的 文件流,当其值为NULL时,系统将刷新整个文件流的缓冲区。
  实例:
  本处设计了三个缓冲展现的实例:
#include<stdio.h>
void main()
{
  printf(1---1);
  /*fflush(stdout);*/
  fprintf(stderr,"2---2");
  printf("3---3/n");
  fprintf(stderr,"4--4/n");
}
7:项目:通用函数库之调节和测验功效库封装
   1)调节和测验库内容:
      格式化日志输出
      十六进制日志输出
      新闻剖断
   2)调节和测验库设计
     (1)PrintLog
      格式化日志输出函数,其原型为:
      int PrintLog(FILE *fp,const char *pformat,...);
/*-----debug.c-----*/
#include<stdio.h>
#include<stdarg.h>
#include<comlib.h>
int PrintLog(FILE *fp,const char *pfromat,...)
{
  va_list _va_list;
  TIMESTRU timestru;
  char szBuf[1024];
  int nLen;
  if(pformat==NULL||pfile==NULL) return -1;/*判别指针是不是yes*/
  timestu=GetTime();
  nLen=sprintf(szBuf,"%04d.%02d.%02d %02d:%02d:%02d. [%d]: ",timestru.nYear,timestru.nMon,timestru.nDay,timestru.nHour,timestru.nMin,timestru.nSec,getpid());
  va_start(_va_list,pformat);
  nLen+=vsprintf(szBuf+nLen,pformat,_va_list);
  va_end(_va_list);
  nLen+=sprintf(szBuf+nLen,"/n");
  if(fputs(szBfu,pfile)!=EOF && fflush(pfile)!=EOF) 
    return 0;/*出口并刷新文件流*/
 
  return -2;/*不当重返*/
}
   (2)PrintTraceLog
        int PrintTraceLog(const char *pformat,...);
        焦点代码
if((fp=open(TRACE_FILE),"a")!=NULL)
{
  ret=PrintTraceLog(fp,szBuf);
  fclose(fp);
  return(set);
}
(3) Verify
       消息决断函数,其原型为:
      int Verify(int bStatus,const char *szBuf,const char *szFile,int nLine);
  (5)调节和测验库应用实例:
#include<stdio.h>
void main()
{
  int i=10000;
  PrintLog(stderr,"This is test[%d]/n");
  PrintTraceLOg("This is test [%d]/n");
  PrintTraceLog(----------------);
  Verify(0,NULL,_FILE_,_LINE_);
  PrintTraceLog("---------------");
  Verify(0);
  PrintTraceLog("---------------");
  Verify(1);
  
}
 
作者“pstary”

#include<stdio.h>

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
int fd;
fp=fopen(“/etc/passwd”,”r”);
fd=fileno(fp);
printf(“fd=%d/n”,fd);
fclose(fp);
}
执行 fd=3

相对于整...

正文恒久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135421.htm

1. fprintf 职能:传送格式化输出到一个文书中
表头文件:#include<stdio.h>
函数原型:int fprintf(FILE *stream, char *format[, argument,...]);
FILE* 一个FILE型的指针
char* 格式化输入函数,和printf里的格式一样
重回值:成功时重返转变的字节数,退步时回来二个负数
fp = fopen("/local/test.c","a+");
fprintf(fp,"%sn",str);

复制代码 代码如下:

 在标准库中,结构FILE是指向文件的指针,全体对文件的操作都以透过FILE实现的,FILE指针也称之为文件流,它定义在头文件<stdio.h>,
相对于整形的起码文件I/O描述符,它提供了I/O缓冲作用。
1,创设、展开、关闭与删除文件的函数族
#include<stdio.h>
FILE *fopen(const char *filename,const char *type);
FILE *freopen(const char *filename,const char *type,FIlE *strem);
int fclose(FILE * stream);
int remove(const char *filename);
int rename(const char *oldname,const char *newname);
/*filename       展开文件的称号(带路线)*/
/*Type           张开文件的秘籍,由权力和体系两局地构成,后边三个能够是r、w、a、r+、w+、a+,后面一个私下认可表示文本文件、使用b表示二进制文件*/
/*stream  已经开拓的公文指针*/
函数fopen张开或成立文件;fclose关闭文件;函数freopen重新展开文件;函数remove删除磁盘文件;函数rename退换文件名称。
ex1:以只读情势打开文本文件/etc/passwd:
                    FILE *fp;
                    fp=fopen("/etc/passwd","r");
ex2:以二进制情势创造文件rr.txt:
                   FILE *fp;
                   fp=fopen("rr.txt","wb");
(只读展开'r',只写展开'w',追加'a',加强功用读写张开'+')
2)freopen函数
     本函数达成文件流的替换。它首先关闭原来的书文件流stream,然后再以freopen的艺术张开四个新的公文流,此后对最先的作品件流的妄动操作都自动调换为对新文件流的操作。成功时回来指向新文件的FILE型指针,不然再次来到NULL。
  Unix进程私下认可张开四个公文:标准输出、标准输入、标准错误输出,它们的FILE标志符号分别是stdout、stdin、stderr。函数freopen常用于将上述四个文本流重定向,完成方式如下:
/*-----------open.c------------*/
#include<stdio.h>
void main()
{
  FILE *fp;
  char *szBuf[100];
  /*将显示屏规范输出的原委重定向到文件"/tmp/1" */
  if((fp=freopen("/tmp/1","w",stderr))==NULL)
  {
     printf("stderr--/tmp/1 failed./n");
     return ;
  }
  /*stderr已经输出重定向,全数错误输出内容都将写到"/tmp/1"*/
  fputs("T Like Unix./n",stderr);
  /*闭馆文件*/
  fclose(fp);
  /*将规范输入由键盘输入改变为从文件"/tmp/1"中读入*/
  if((fp=freopen("/tmp/1","r",stdin))==NULL)
  {
     printf("stdin --/tmp/1 failed./n");
     return ;
  }
  memset(szBuf,0,sizeof(szBuf));
 /*stdin 已经输入重定向,全数内容都将写入文件"/tmp/1"*/
  fgets(szBuf,sizeof(szBuf),stdin);
  printf("szBuf=[%s]",szBuf);
  fclose(fp);
}
 编写翻译与运作:
gcc -o open.c  open
./open
szBuf = [I Like UNIX.]
3)fclose函数
   为了削减系统财富消耗、防止误改文件内容和换代文件缓冲,应该立即关门在未来一段时间内不需求利用的文书。函数fclose关闭文件流stream,成功时重临0,不然重回EOF;
4)remove
   函数remove删除字符串filename钦命的文本或目录,当filename钦定文件时,remove也正是unlinke函数,当filename钦定目录时,相当于rmdir;
                                          文件的无格式读写
1)字符读写
    字符读写函数每一趟只操作三个字符,为了压实磁盘读写成效,标准文件编制程序中提供了缓冲管理。
    (1)字符输入函数
#include<stdio.h>
int getc(FILE *stream);
int getchar(void);
int fgetc(FILE *stream);
   函数getc以unsigned char类型读取文件输入流stream中的贰个字符,并将该无符号字符转化为整数再次回到,同不时间活动文件指针到下贰个字符处。函数getchar实际上是有关getc的三个宏定义"getc(stdin)".
     函数fgetc的职能看似于getc,差别的是,它的试行进度远远小于getc,由此getc平日被定义在宏中使用。
     当文件截至或不那时候,那八个函数都将重返EOF,EOF为常数。极度注意,他们的重返值都以整形。  EOF日常都以概念为int型-1,在好几UNIX中,将EOF强行转变为字符型后的数值不再与原值相等,进而程序不可能科学执行。
     因而错误的公文截至决断代码如下:
char  c;/*---char c是荒谬的---*/
.....
c=getc(FILENAME);
if(c==EOF)
....
    而科学的文件停止剖断代码是:
int c;/*---char c是错误的---*/
.....
c=getc(FILENAME);
if(c==EOF)
....
   (2)字符输出函数族
#include<stdio.h>
int putc(int c,FILE *stream);
int putchar(int c);
int fputc(int c,FILE *stream);
      函数putc首先先将int型参数c自动调换为unsigned char类型,然后写入文件流stream中,同一时间活动文件指针到下多少个字符处。函数putchar 实际上是关于putc的宏定义"putc(stdout)"。
      (3)实例
      报文分析是Unix应用的三个关键内容。双方把约定的多少个域通过某种排序和剪切格局结合在联合,就成了报文。报文分析正是从报文中表明出各种域的多少,比如从银行的代收代付报文查搜索账号域和资金域的剧情。
      字符串报文是报文的显要分支,它以字符串为载体记录了域的数目。在字符串报文中,域与域之间最广泛的第22中学分隔格局是定位长度分割和特殊字符(串)分割。前面一个每一个域占用固定宽度,深入分析时只是读取特定岗位的多少就能够。后面一个的域与域之间由定点的字符(串)连接,深入分析时索要总括固定字符(串)出现的次数,以决定域 的序号和内容。Unix中passwd文件正是由":"分割的字符串报文组合而成的。
     例子:五个运用字符读写函数分析报文的,程序读取文件的"/etc/passwd"中每一个字符,并将"客户名称"域(报文的率先个域)单独建议,存入文件"copyname.txt"中,源程序如下:
#include<stdio.h>
void  main()
{
  FILE *fpr,*fpw;
  int c=0,f=0;
  /*以下张开源文件*/
  if((fpr=fopen("/etc/passwd","r"))==NULL)
  {
    printf("open file /etc/passwd failed./n");
    return ;
  }
  /*以下展开指标文件*/
  if((fpw=fopen("./copyname.txt","w"))==NULL)
  {
     printf("open file ./copyname.txt failed./n");
     fclose(fpr);/*比如程序须要同极度间打开多个或多个以上文件,当后二个文件的开拓操作发生错误,而不得不退出函数时,必得关闭前面已经开采的文本。*/
     return ;
  }
  while((c=getc(fpr)!=EOF))
  {  
    /*字符已经读取到了c中*/
    if(f==0)
    {
      if(c!=':') putchar(putc(c,fpw));
      else f=1;
    }
    else if(c=='/n')
    {
       f=0;
       putchar(getc(c,fpw));
    }
  }
  fclose(fpr);
  fclose(fpw);
}

#include<stdio.h>

25.setbuf(设置文件流的缓冲区)
有关函数 setbuffer,setlinebuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setbuf(FILE * stream,char * buf);
函数表明在展开文件流后,读取内容前边,调用setbuf()能够用来设置文件流的缓冲区。参数stream为钦赐的文件流,参数buf指向自定的缓冲区早先地址。就算参数buf为NULL指针,则为无缓冲IO。Setbuf()也等于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
返回值  
26.setbuffer(设置文件流的缓冲区)
*连锁函数 setlinebuf,setbuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setbuffer(FILE
stream,char * buf,size_t size);
函数表达在张开文件流后,读取内容前边,调用setbuffer()可用来安装文件流的缓冲区。参数stream为钦命的文书流,参数buf指向自定的缓冲区初始地址,参数size为缓冲区大小。
返回值

复制代码 代码如下:

理之当然要知器具体的措施揣测唯有源码。

复制代码 代码如下:

28.setvbuf(设置文件流的缓冲区) 连带函数 setbuffer,setlinebuf,setbuf
表头文件 #include<stdio.h>
定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函数表明在开发文件流后,读取内容前边,调用setvbuf()能够用来安装文件流的缓冲区。参数stream为内定的公文流,参数buf指向自定的缓冲区发轫地址,参数size为缓冲区大小,参数mode有下列二种
_IONBF 无缓冲IO
_IOLBF 以换行为依赖的无缓冲IO
_IOFBF 完全无缓冲IO。即使参数buf为NULL指针,则为无缓冲IO。
返回值

自个儿导出的公文应当是utf8的,为什么会呈现ASCII呢,大家明白ASCII并不曾中文编码,那么真的不寻常吧?

#include<stdio.h>
main()
{
FILE * fp =fdopen(0,”w+”);
fprintf(fp,”%s/n”,”hello!”);
fclose(fp);
}
执行 hello!

6.feof(检查文件流是或不是读到了文件尾) 连带函数 fopen,fgetc,fgets,fread
表头文件 #include<stdio.h>
定义函数 int feof(FILE * stream);
函数表明feof()用来侦测是或不是读取到了文件尾,尾数stream为fopen()所再次来到之文件指针。假设已到文件尾则重临非零值,别的景况再次来到0。
再次来到值 重临非零值代表已到达文件尾。
 
7.fflush(更新缓冲区) 连锁函数 write,fopen,fclose,setbuf
表头文件 #include<stdio.h>
定义函数 int fflush(FILE* stream);
函数表达fflush()会迫使将缓冲区内的数额写回参数stream钦命的公文中。如若参数stream为NULL,fflush()会将全数打开的文件数量更新。
归来值 成功重回0,失利再次回到EOF,错误代码存于errno中。
错误代码 EBADF 参数stream 钦命的文件未被张开,或展开状态为只读。另外错误代码参谋write()。
 
8.fgetc(由文件中读取贰个字符) 连带函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
定义函数 nt fgetc(FILE * stream);
函数表达fgetc()从参数stream所指的文书中读取贰个字符。若读到文件尾而大多据时便赶回EOF。
回去值 getc()会回去读取到的字符,若再次来到EOF则意味到了文本尾。
范例


复制代码 代码如下:

#include<stdlib.h>
main()
{
char template[ ]=”template-XXXXXX”;
mktemp(template);
printf(“template=%s/n”,template);
}

能够看来即使"Linux公社"字符串在其次行重回为ASCII而在率先表现UTF-8,大家能够测算出 file 命令是检查测量检验文件开首的一点字符而回到的,并未任何查看,大概有如何别的算法,不过他不是百分百翻看。试想假使一切查看贰遍三个200G的备份文件弹指间就回到了结果也是不可能的。
在file的支援中也明显的写着
  Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written.  The language tests
    look for particular strings (cf.  ) that can appear anywhere in the first few blocks of a file.

复制代码 代码如下:

#include<stdio.h>
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
执行 参考fread()。

charset=us-ascii with very long lines

复制代码 代码如下:

复制代码 代码如下:

        fputs("n",p);
        fputs("Linux公社n",p);
        fclose(p);
        return 0;
}

3. clearerr(清除文件流的不当旗标) 连锁函数 feof
表头文件 #include<stdio.h>
定义函数 void clearerr(FILE * stream);
函数表明 clearerr()清除参数stream钦点的文书流所使用的谬误旗标。
返回值
 
4.fclose(关闭文件) 有关函数 close,fflush,fopen,setbuf
表头文件 #include<stdio.h>
定义函数 int fclose(FILE * stream);
函数说明fclose()用来关闭先前fopen()张开的文书。此动作会让缓冲区内的数码写入文件中,并释放系统所提供的公文能源。
归来值 若关文件动作成功则再次回到0,有错误产生时则赶回EOF并把错误代码存到errno。
错误代码 EBADF表示参数stream非已开荒的公文。
范例 请参考fopen()。
 
5.fdopen(将文件陈诉词转为文件指针) 连锁函数 fopen,open,fclose
表头文件 #include<stdio.h>
概念函数 FILE * fdopen(int fildes,const char * mode);
函数表明 fdopen()会将参数fildes 的公文描述词,转变为相应的文件指针后回来。参数mode 字符串则意味着公文指针的流形态,此形态必需和原本文件汇报词读写情势同样。关于mode 字符串格式请参谋fopen()。
归来值 转变到功时回来指向该流的文件指针。战败则赶回NULL,并把错误代码存在errno中。
范例

#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,&pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}
执行 offset = 5
offset =0
offset=10

实际上并从未怎么两样这两个文件 test10 和test11 都有2行在那之中贰个不长的行全部都以test字符串,第二行是Linux公社
妇孺皆知他们理应回到UTF8编码,不过并非
linuxidc@linuxidc:~$ file -i test10.txt
test10.txt: text/plain; charset=us-ascii
linuxidc@linuxidc:~$ file -i test11.txt
test11.txt: text/plain; charset=utf-8

r Open text file for reading. The stream is positioned at the beginning of the file.
r+ Open for reading and writing. The stream is positioned at the beginning of the file.
w Truncate file to zero length or create text file for writing. The stream is positioned at the beginning of the file.
w+ Open for reading and writing. The file is created if it does not exist, otherwise it is truncated. The stream is posi‐
tioned at the beginning of the file.
a Open for appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the
end of the file.
a+ Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file posi‐
tion for reading is at the beginning of the file, but output is always appended to the end of the file.

27.setlinebuf(设置文件流为线性缓冲区) 连带函数 setbuffer,setbuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setlinebuf(FILE * stream);
函数表明setlinebuf()用来设置文件流以换行为依靠的无缓冲IO。也等于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。
返回值

金沙js333娱乐场 1

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”);
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}

下一场用如下2个小程序测量检验了一下

12.fputc(将一点名字符写入文件流中) 相关函数 fopen,fwrite,fscanf,putc
表头文件 #include<stdio.h>
定义函数 int fputc(int c,FILE * stream);
函数表明 fputc 会将参数c 转为unsigned char 后写入参数stream 钦点的公文中。
回到值 fputc()会回到写入成功的字符,即参数c。若重返EOF则表示写入失败。
范例

r      Open text file for reading.  The stream is positioned at the beginning of the file.
r+     Open for reading and writing.  The stream is positioned at the beginning of the file.
w      Truncate file to zero length or create text file for writing.  The stream is positioned at the beginning of the file.
w+     Open for reading and writing.  The file is created if it does not exist, otherwise it is truncated.  The  stream  is  posi‐
       tioned at the beginning of the file.
a      Open  for  appending  (writing at end of file).  The file is created if it does not exist.  The stream is positioned at the
       end of the file.
a+     Open for reading and appending (writing at end of file).  The file is created if it does not exist.  The initial file posi‐
       tion for reading is at the beginning of the file, but output is always appended to the end of the file.

明天在Linux使用file -i 查看MYSQLDUMP文件的时候其出口为

#include<stdio.h>
main()
{
FILE * fp;
int c,i;
for(i=0li<5;i++)
{
c=getchar();
putchar(c);
}
}
执行 1234 /*输入*/
1234 /*输出*/

22.putc(将一点名字符写入文件中) 相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include<stdio.h>
定义函数 int putc(int c,FILE * stream);
函数表达 putc()会将参数c转为unsigned char后写入参数stream钦赐的文件中。尽管putc()与fputc()效率同样,但putc()为宏定义,非真正的函数调用。
再次来到值 putc()会回来写入成功的字符,即参数c。若再次回到EOF则代表写入失利。
范例 参考fputc()。  
23.putchar(将钦定的字符写到规范输出设备) 连锁函数 fopen,fwrite,fscanf,fputc
表头文件 #include<stdio.h>
定义函数 int putchar (int c);
函数表达 putchar()用来将参数c字符写到标准输出设备。
重返值 putchar()会重回输出成功的字符,即参数c。若重临EOF则代表输出失利。
外加表明 putchar()非真正函数,而是putc(c,stdout)宏定义。
范例 参考getchar()。  
24.rewind(重设文件流的读写地点为文件开首) 连带函数 fseek,ftell,fgetpos,fsetpos
表头文件 #include<stdio.h>
定义函数 void rewind(FILE * stream);
函数表明rewind()用来把文件流的读写地方移至文件起始。参数stream为已开荒的文本指针。此函数相当于调用fseek(stream,0,SEEK_SET)。
返回值
**范例 参考fseek()

        fputs("n",p);
        fclose(p);
        return 0;
}

#include<stdio.h>
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
set_s(0,”Linux!”);
set_s(1,”FreeBSD!”);
set_s(2,”Windows2000.”);
stream=fopen(“/tmp/fwrite”,”w”);
fwrite(s,sizeof(struct test),nmemb,stream);
fclose(stream);
}
执行 参考fread()。

复制代码 代码如下:

就此file -i检查实验的并不一定是千真万确的字符集。

15.fseek(移动文件流的读写地方) 相关函数 rewind,ftell,fgetpos,fsetpos,lseek
表头文件 #include<stdio.h>
定义函数 int fseek(FILE * stream,long offset,int whence);
函数表达fseek()用来运动文件流的读写地点。参数stream为已开采的文件指针,参数offset为依赖参数whence来运动读写地方的位移数。
参数 whence为下列在这之中一种:
SEEK_SET从距文件开端offset位移量为新的读写地点。SEEK_CUENCORE以当下的读写地点以后扩大offset个位移量。
SEEK_END将读写地方指向文件尾后再充实offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的产出。
下列是较极其的行使方法: 1) 欲将读写地点移动到文件伊始时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写地点移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);
重回值 当调用成功时则重回0,若有不当则赶回-1,errno会存放错误代码。
叠合说明fseek()不像lseek()会重返读写地点,因而必需利用ftell()来收获近年来读写的地方。
范例

29.ungetc(将点名字符写回文件流中) 连带函数 fputc,getchar,getc
表头文件 #include<stdio.h>
定义函数 int ungetc(int c,FILE * stream);
函数表明ungetc()将参数c字符写回参数stream所钦命的文书流。那些写回的字符会由下三个读取文件流的函数取得。
回来值 成功则赶回c 字符,若有荒唐则赶回EOF。

int main(void)
{
        FILE *p;
        int i=0;
        p=fopen("test11.txt","w+");
        fputs("Linux公社n",p);
        while(i<50000000)
        {
                fputs("test",p);
                i++;
        }

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
     FILE *fp = NULL;
     char* str;
     char re;
     int num = 10;
     str = (char*)malloc(100);
     //snprintf(str, 10,"test: %s", "0123456789012345678");
    // printf("str=%sn", str);
     fp = fopen("/local/test.c","a+");
     if (fp==NULL){
        printf("Fail to open filen");
     }
//     fseek(fp,-1,SEEK_END);
     num = ftell(fp);
     printf("test file long:%dn",num);
     fscanf(fp,"%s",str);
     printf("str = %sn",str);
     printf("test a: %sn",str);
     while ((re=getc(fp))!=EOF){//getc能够用作fgetc用
        printf("%c",re);
     }
     //fread(str,10,10,fp);
     fgets(str,100,fp);
     printf("test a: %sn",str);
     sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
     printf("str2=%sn", str);
   //  fprintf(fp,"%sn",str);
     fwrite(str,2,10,fp);
     num = ftell(fp);
     if(str!=NULL){
        free(str);
     }
     fclose(fp);
     return 0;
}

2. fscanf 效果与利益:从多少个流中施行格式化输入
表头文件:#include<stdio.h>
函数原型:int fscanf(FILE *stream, char *format[,argument...]);
FILE* 叁个FILE型的指针
char* 格式化输出函数,和scanf里的格式一样
再次来到值:成功时回来转变的字节数,战败时回来贰个负数
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);

9.fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
概念函数 har * fgets(char * s,int size,FILE * stream);
函数表达fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内部存款和储蓄器空间,直到出现换行字符、读到文件尾或是已读了size-1个字符截至,最终会加上NULL作为字符串停止。
回去值 gets()若成功则赶回s指针,重返NULL则意味着有不当发生。
范例

22.putc(将一点名字符写入文件中) 相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include<stdio.h>
定义函数 int putc(int c,FILE * stream);
函数表明 putc()会将参数c转为unsigned char后写入参数stream钦命的文书中。就算putc()与fputc()成效同样,但putc()为宏定义,非真正的函数调用。
重回值 putc()会回去写入成功的字符,即参数c。若重返EOF则意味着写入失利。
范例 参考fputc()。  
23.putchar(将点名的字符写到标准输出设备) 相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include<stdio.h>
定义函数 int putchar (int c);
函数表达 putchar()用来将参数c字符写到标准输出设备。
再次来到值 putchar()会回来输出成功的字符,即参数c。若重返EOF则意味着输出战败。
叠合表明 putchar()非真正函数,而是putc(c,stdout)宏定义。
范例 参考getchar()。  
24.rewind(重设文件流的读写地方为文件最初) 连锁函数 fseek,ftell,fgetpos,fsetpos
表头文件 #include<stdio.h>
定义函数 void rewind(FILE * stream);
函数表明rewind()用来把文件流的读写地方移至文件起首。参数stream为已展开的公文指针。此函数也就是调用fseek(stream,0,SEEK_SET)。
返回值
**范例 参考fseek()

复制代码 代码如下:

#include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
执行 this is a test /*输入*/
this is a test /*输出*/

你可能感兴趣的稿子:

  • C语言文件操作中 fgets与fputs 函数详解
  • C语言 文件操作深入分析详解及实例代码
  • C语言文件操作 fopen, fclose, mkdir详解
  • c语言文件读写示例(c语言文件操作)
  • c语言程序设计文本操作方法示例(CreateFile和fopen)
  • C语言文件操作函数freopen详细剖判
  • 关于C语言文件操作方法

27.setlinebuf(设置文件流为线性缓冲区) 有关函数 setbuffer,setbuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setlinebuf(FILE * stream);
函数表明setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。
返回值

2. fscanf 成效:从一个流中施行格式化输入
表头文件:#include<stdio.h>
函数原型:int fscanf(FILE *stream, char *format[,argument...]);
FILE* 叁个FILE型的指针
char* 格式化输出函数,和scanf里的格式同样
再次回到值:成功时重临转变的字节数,退步时回来贰个负数
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);

6.feof(检查文件流是还是不是读到了文件尾) 连锁函数 fopen,fgetc,fgets,fread
表头文件 #include<stdio.h>
定义函数 int feof(FILE * stream);
函数表明feof()用来侦测是或不是读取到了文本尾,倒数stream为fopen()所再次回到之文件指针。要是已到文件尾则再次来到非零值,别的情况重回0。
归来值 再次回到非零值代表已达到文件尾。
 
7.fflush(更新缓冲区) 相关函数 write,fopen,fclose,setbuf
表头文件 #include<stdio.h>
定义函数 int fflush(FILE* stream);
函数表达fflush()会迫使将缓冲区内的多少写回参数stream钦赐的文件中。若是参数stream为NULL,fflush()会将具有打开的文书数量更新。
回来值 成功再次来到0,战败重回EOF,错误代码存于errno中。
错误代码 EBADF 参数stream 内定的文件未被展开,或张开状态为只读。别的错误代码参照他事他说加以考察write()。
 
8.fgetc(由文件中读取一个字符) 连带函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
定义函数 nt fgetc(FILE * stream);
函数表达fgetc()从参数stream所指的文书中读取四个字符。若读到文件尾而非常多据时便回到EOF。
回去值 getc()会回去读取到的字符,若重返EOF则意味到了文本尾。
范例

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}

#include<stdio.h>
main()
{
FILE * stream;
long offset;
fpos_t pos;
stream=fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos=10;
fsetpos(stream,&pos);
printf(“offset = %d/n”,ftell(stream));
fclose(stream);
}
执行 offset = 5
offset =0
offset=10

复制代码 代码如下:

14.freopen(打开文件) 相关函数 fopen,fclose
表头文件 #include<stdio.h>
概念函数 FILE * freopen(const char * path,const char * mode,FILE * stream);
函数表明参数path字符串饱含欲展开的文件路线及文件名,参数mode请仿照效法fopen()表明。参数stream为已开发的文本指针。Freopen()会将原stream所展开的文本流关闭,然后张开参数path的公文。
重临值 文件顺遂展开后,指向该流的文件指针就能够被重返。若是文件张开失利则赶回NULL,并把错误代码存在errno 中。
范例

fopen(张开文件) 有关函数 open,fclose
表头文件 #include<stdio.h>
概念函数 FILE * fopen(const char * path,const char * mode);
函数表明参数path字符串包括欲张开的公文路径及文件名,参数mode字符串则代表着流形态。
mode有下列二种形象字符串: r 张开只读文件,该公文必需存在。
r+ 张开可读写的文件,该文件必需存在。
w 展开只写文件,若文件存在则文件长度清为0,即该公文内容会破灭。若文件空中楼阁则树立该文件。
w+ 张开可读写文件,若文件存在则文件长度清为零,即该文件内容会不复存在。若文件不设有则树立该公文。
a 以附加的艺术展开只写文件。若文件荒诞不经,则会成立该公文,纵然文件存在,写入的数据会被加到文件尾,即文件原先的剧情会被封存。
a+ 以附加措施展开可读写的公文。若文件一纸空文,则会创设该文件,假设文件存在,写入的数据会被加到文件尾后,即文件原先的开始和结果会被保留。

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a,fp);
fclose(fp);
}

#include<stdlib.h>
main()
{
char template[ ]=”template-XXXXXX”;
mktemp(template);
printf(“template=%s/n”,template);
}

14.freopen(张开文件) 相关函数 fopen,fclose
表头文件 #include<stdio.h>
概念函数 FILE * freopen(const char * path,const char * mode,FILE * stream);
函数表明参数path字符串蕴含欲展开的文件路线及文件名,参数mode请参照他事他说加以考察fopen()表达。参数stream为已开采的文本指针。Freopen()会将原stream所打开的公文流关闭,然后展开参数path的文件。
回去值 文件顺遂展开后,指向该流的文件指针就能被重返。借使文件展开退步则赶回NULL,并把错误代码存在errno 中。
范例

10.fileno(再次来到文件流所使用的文书描述词) 连带函数 open,fopen
表头文件 #include<stdio.h>
定义函数 int fileno(FILE * stream);
函数表达 fileno()用来收获参数stream内定的文书流所使用的文书陈说词。
回到值 再次回到文件呈报词。
范例

上述的形状字符串都足以再加一个b字符,如rb、w+b或ab+等结合,到场b 字符用来报告函数库张开的文本为二进制文件,而非纯文字文件。然而在POSIX系统,富含Linux都会忽略该字符。由fopen()所建设构造的新文件会持有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
再次来到值 文件顺遂展开后,指向该流的文件指针就能够被再次回到。若果文件展开退步则赶回NULL,并把错误代码存在errno 中。
外加表明一般来说,开文件后会作一些文件读取或写入的动作,若开文件失利,接下去的读写动作也无力回天顺遂实行,所以在fopen()后请作错误判定及管理。
范例

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“/etc/passwd”,”r”);
fp=freopen(“/etc/group”,”r”,fp);
fclose(fp);
}

#include<stdio.h>
main()
{
char s[80];
fputs(fgets(s,80,stdin),stdout);
}
执行 this is a test /*输入*/
this is a test /*输出*/

上述的造型字符串都得以再加二个b字符,如rb、w+b或ab+等组合,插足b 字符用来告诉函数库展开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,富含Linux都会忽视该字符。由fopen()所树立的新文件会有着S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参照他事他说加以考察umask值。
归来值 文件顺遂展开后,指向该流的文本指针就能被重回。若果文件张开失败则赶回NULL,并把错误代码存在errno 中。
外加说惠氏(Beingmate)般来说,开文件后会作一些文本读取或写入的动作,若开文件退步,接下去的读写动作也无法顺遂进行,所以在fopen()后请作错误决断及管理。
范例

#include<stdio.h>
main()
{
FILE * fp =fdopen(0,”w+”);
fprintf(fp,”%s/n”,”hello!”);
fclose(fp);
}
执行 hello!

20.gets(由规范输入设备内读进一字符串) 相关函数 fopen,fread,fscanf,fgets
表头文件 #include<stdio.h>
概念函数 char * gets(char *s);
函数说明gets()用来从正式配备读入字符并存到参数s所指的内部存款和储蓄器空间,直到出现换行字符或读到文件尾截止,最终加上NULL作为字符串停止。
回去值 gets()若成功则赶回s指针,重回NULL则意味着有荒唐产生。
叠合表明由于gets()无法通晓字符串s的轻重缓急,必得蒙受换行字符或文件尾才会终结输入,由此轻松形成缓冲溢出的安全性难题。提出使用fgets()代替。
范例 参考fgets()  
21.mktemp(发生独一的有时文件名) 有关函数 tmpfile
表头文件 #include<stdlib.h>
概念函数 char * mktemp(char * template);
函数表达mktemp()用来发出独一的临时文件名。参数template所指的文件名称字符串中最终两个字符必得是XXXXXX。发生后的文书名会借字符串指针重返。
回去值 文件顺遂张开后,指向该流的文本指针就能被重返。假如文件展开战败则赶回NULL,并把错误代码存在errno中。
外加表明 参数template所指的文件名称字符串必需申明为数组,如:
char template[ ]=”template-XXXXXX”;
不可用char * template=”template-XXXXXX”;
范例

25.setbuf(设置文件流的缓冲区)
相关函数 setbuffer,setlinebuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setbuf(FILE * stream,char * buf);
函数说明在张开文件流后,读取内容前面,调用setbuf()能够用来安装文件流的缓冲区。参数stream为钦赐的文本流,参数buf指向自定的缓冲区起首地址。要是参数buf为NULL指针,则为无缓冲IO。Setbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
返回值  
26.setbuffer(设置文件流的缓冲区)
*连带函数 setlinebuf,setbuf,setvbuf
表头文件 #include<stdio.h>
定义函数 void setbuffer(FILE
stream,char * buf,size_t size);
函数表明在开发文件流后,读取内容前边,调用setbuffer()可用来安装文件流的缓冲区。参数stream为钦定的公文流,参数buf指向自定的缓冲区起先地址,参数size为缓冲区大小。
返回值

fopen(张开文件) 有关函数 open,fclose
表头文件 #include<stdio.h>
概念函数 FILE * fopen(const char * path,const char * mode);
函数表达参数path字符串包括欲张开的公文路径及文件名,参数mode字符串则意味着着流形态。
mode有下列二种形象字符串: r 展开只读文件,该公文必需存在。
r+ 展开可读写的文件,该文件必须存在。
w 张开只写文件,若文件存在则文件长度清为0,即该文件内容会破灭。若文件不设有则树立该文件。
w+ 展开可读写文件,若文件存在则文件长度清为零,即该文件内容会流失。若文件不设有则树立该公文。
a 以附加的主意展开只写文件。若文件荒诞不经,则会创立该公文,要是文件存在,写入的多寡会被加到文件尾,即文件原先的剧情会被封存。
a+ 以附加措施展开可读写的文件。若文件子虚乌有,则会创设该公文,即使文件存在,写入的多寡会被加到文件尾后,即文件原先的原委会被保存。

复制代码 代码如下:

18.getc(由文件中读取三个字符) 有关函数 read,fopen,fread,fgetc
表头文件 #include<stdio.h>
定义函数 int getc(FILE * stream);
函数表达getc()用来从参数stream所指的文书中读取三个字符。若读到文件尾而不菲据时便回到EOF。纵然getc()与fgetc()功效同样,但getc()为宏定义,非真正的函数调用。
回到值 getc()会再次来到读取到的字符,若重临EOF则表示到了文本尾。
范例 参考fgetc()。  
19.getchar(由正规输入设备内读进一字符) 连带函数 fopen,fread,fscanf,getc
表头文件 #include<stdio.h>
定义函数 int getchar(void);
函数说明getchar()用来从正式输入设备中读取四个字符。然后将该字符从unsigned char转换到int后回来。
回来值 getchar()会回来读取到的字符,若再次回到EOF则代表有错误产生。
外加表明 getchar()非真正函数,而是getc(stdin)宏定义。
范例

16.ftell(取得文件流的读取地方) 连带函数 fseek,rewind,fgetpos,fsetpos
表头文件 #include<stdio.h>
定义函数 long ftell(FILE * stream);
函数说明ftell()用来获取文件流如今的读写地方。参数stream为已开发的文本指针。
归来值 当调用成功时则赶回最近的读写地方,若有荒唐则赶回-1,errno会存放错误代码。
错误代码 EBADF 参数stream无效或可活动读写地点的文本流。
范例 参考fseek()。  
17.fwrite(将数据写至文件流) 连带函数 fopen,fread,fseek,fscanf
表头文件 #include<stdio.h>
概念函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明fwrite()用来将数据写入文件流中。参数stream为已开发的文本指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会回到实际写入的nmemb数目。
归来值 重返实际写入的nmemb数目。
范例

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
fp=fopen(“noexist”,”a+”);
if(fp= =NULL) return;
fclose(fp);
}

10.fileno(重临文件流所使用的公文描述词) 有关函数 open,fopen
表头文件 #include<stdio.h>
定义函数 int fileno(FILE * stream);
函数表达 fileno()用来拿到参数stream钦定的公文流所使用的文件汇报词。
回来值 再次来到文件陈诉词。
范例

复制代码 代码如下:

3. clearerr(清除文件流的不当旗标) 相关函数 feof
表头文件 #include<stdio.h>
定义函数 void clearerr(FILE * stream);
函数表达 clearerr()清除参数stream钦定的文本流所使用的荒唐旗标。
返回值
 
4.fclose(关闭文件) 连带函数 close,fflush,fopen,setbuf
表头文件 #include<stdio.h>
定义函数 int fclose(FILE * stream);
函数表达fclose()用来关闭先前fopen()打开的文本。此动作会让缓冲区内的数码写入文件中,并释放系统所提供的文件财富。
归来值 若关文件动作成功则重临0,有不当发生时则赶回EOF并把错误代码存到errno。
错误代码 EBADF表示参数stream非已展开的文件。
范例 请参考fopen()。
 
5.fdopen(将文件汇报词转为文件指针) 相关函数 fopen,open,fclose
表头文件 #include<stdio.h>
概念函数 FILE * fdopen(int fildes,const char * mode);
函数表达 fdopen()会将参数fildes 的文件描述词,转变为对应的文书指针后回去。参数mode 字符串则意味着公文指针的流形态,此形态必得和原先文件陈述词读写方式同样。关于mode 字符串格式请参见fopen()。
归来值 转变到功时重临指向该流的文书指针。败北则赶回NULL,并把错误代码存在errno中。
范例

9.fgets(由文件中读取一字符串) 连带函数 open,fread,fscanf,getc
表头文件 include<stdio.h>
概念函数 har * fgets(char * s,int size,FILE * stream);
函数表达fgets()用来从参数stream所指的公文内读入字符并存到参数s所指的内部存款和储蓄器空间,直到出现换行字符、读到文件尾或是已读了size-1个字符截止,最后会助长NULL作为字符串结束。
归来值 gets()若成功则赶回s指针,重返NULL则代表有荒唐产生。
范例

20.gets(由规范输入设备内读进一字符串) 连锁函数 fopen,fread,fscanf,fgets
表头文件 #include<stdio.h>
概念函数 char * gets(char *s);
函数说明gets()用来从规范配备读入字符并存到参数s所指的内部存款和储蓄器空间,直到出现换行字符或读到文件尾截止,最终加上NULL作为字符串甘休。
回到值 gets()若成功则赶回s指针,再次来到NULL则表示有荒唐发生。
叠合表明由于gets()不能理解字符串s的分寸,必得遭遇换行字符或文件尾才会终止输入,由此轻巧导致缓冲溢出的安全性难题。建议选用fgets()替代。
范例 参考fgets()  
21.mktemp(产生独一的临时文件名) 相关函数 tmpfile
表头文件 #include<stdlib.h>
概念函数 char * mktemp(char * template);
函数表达mktemp()用来发出独一的有的时候文件名。参数template所指的文件名称字符串中最终五个字符必需是XXXXXX。产生后的文件名会借字符串指针再次回到。
重回值 文件顺遂张开后,指向该流的文书指针就能够被重临。倘使文件展开退步则赶回NULL,并把错误代码存在errno中。
外加表达 参数template所指的文件名称字符串必得申明为数组,如:
char template[ ]=”template-XXXXXX”;
不可用char * template=”template-XXXXXX”;
范例

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp = NULL;
char* str;
char re;
int num = 10;
str = (char*)malloc(100);
//snprintf(str, 10,"test: %s", "0123456789012345678");
// printf("str=%sn", str);
fp = fopen("/local/test.c","a+");
if (fp==NULL){
printf("Fail to open filen");
}
// fseek(fp,-1,SEEK_END);
num = ftell(fp);
printf("test file long:%dn",num);
fscanf(fp,"%s",str);
printf("str = %sn",str);
printf("test a: %sn",str);
while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
printf("%c",re);
}
//fread(str,10,10,fp);
fgets(str,100,fp);
printf("test a: %sn",str);
sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
printf("str2=%sn", str);
// fprintf(fp,"%sn",str);
fwrite(str,2,10,fp);
num = ftell(fp);
if(str!=NULL){
free(str);
}
fclose(fp);
return 0;
}

18.getc(由文件中读取二个字符) 相关函数 read,fopen,fread,fgetc
金沙js333娱乐场,表头文件 #include<stdio.h>
定义函数 int getc(FILE * stream);
函数表明getc()用来从参数stream所指的文件中读取叁个字符。若读到文件尾而不少据时便回来EOF。尽管getc()与fgetc()效用同样,但getc()为宏定义,非真正的函数调用。
再次来到值 getc()会回去读取到的字符,若重返EOF则表示到了文本尾。
范例 参考fgetc()。  
19.getchar(由专门的职业输入设备内读进一字符) 相关函数 fopen,fread,fscanf,getc
表头文件 #include<stdio.h>
定义函数 int getchar(void);
函数表达getchar()用来从标准输入设备中读取三个字符。然后将该字符从unsigned char转变来int后赶回。
回来值 getchar()会回到读取到的字符,若重临EOF则代表有荒唐发生。
叠合表达 getchar()非真正函数,而是getc(stdin)宏定义。
范例

16.ftell(取得文件流的读取地方) 相关函数 fseek,rewind,fgetpos,fsetpos
表头文件 #include<stdio.h>
定义函数 long ftell(FILE * stream);
函数表明ftell()用来获取文件流方今的读写地方。参数stream为已开荒的文件指针。
回来值 当调用成功时则赶回前段时间的读写地方,若有不当则赶回-1,errno会存放错误代码。
错误代码 EBADF 参数stream无效或可活动读写地点的文件流。
范例 参考fseek()。  
17.fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf
表头文件 #include<stdio.h>
概念函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数表达fwrite()用来将数据写入文件流中。参数stream为已张开的文件指针,参数ptr 指向欲写入的多寡地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会回来实际写入的nmemb数目。
回去值 再次回到实际写入的nmemb数目。
范例

12.fputc(将一点名字符写入文件流中) 连带函数 fopen,fwrite,fscanf,putc
表头文件 #include<stdio.h>
定义函数 int fputc(int c,FILE * stream);
函数表达 fputc 会将参数c 转为unsigned char 后写入参数stream 钦点的文书中。
回去值 fputc()会重返写入成功的字符,即参数c。若重回EOF则意味写入战败。
范例

#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“exist”,”r”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}

13.fputs(将一点名的字符串写入文件内) 连锁函数 fopen,fwrite,fscanf,fputc,putc
表头文件 #include<stdio.h>
定义函数 int fputs(const char * s,FILE * stream);
函数表达 fputs()用来将参数s所指的字符串写入到参数stream所指的文本内。
回到值 若成功则赶回写出的字符个数,重返EOF则表示有荒唐发生。
范例 请参考fgets()。 fread(从文件流读取多少)
连带函数 fopen,fwrite,fseek,fscanf
表头文件 #include<stdio.h>
概念函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数表明fread()用来从文件流中读取数据。参数stream为已张开的文本指针,参数ptr 指向欲存放读取进来的数额空间,读取的字符数以参数size*nmemb来调节。Fread()会再次回到实际读取到的nmemb数目,假如此值比参数nmemb 来得小,则表示可能读到了文件尾或有不当爆发,那时必得用feof()或ferror()来调整产生如何状态。
归来值 重回实际读取到的nmemb数目。
叠合表明
范例

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
int c,i;
for(i=0li<5;i++)
{
c=getchar();
putchar(c);
}
}
执行 1234 /*输入*/
1234 /*输出*/

13.fputs(将一钦命的字符串写入文件内) 连锁函数 fopen,fwrite,fscanf,fputc,putc
表头文件 #include<stdio.h>
定义函数 int fputs(const char * s,FILE * stream);
函数表达 fputs()用来将参数s所指的字符串写入到参数stream所指的文本内。
回到值 若成功则赶回写出的字符个数,再次来到EOF则意味有荒唐发生。
范例 请参考fgets()。 fread(从文件流读取多少)
连锁函数 fopen,fwrite,fseek,fscanf
表头文件 #include<stdio.h>
概念函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明fread()用来从文件流中读取数据。参数stream为已开辟的文本指针,参数ptr 指向欲寄存读取进来的多寡空间,读取的字符数以参数size*nmemb来决定。Fread()会回来实际读取到的nmemb数目,假使此值比参数nmemb 来得小,则意味也许读到了文本尾或有不当产生,那时必需用feof()或ferror()来调控发生如何境况。
重返值 重回实际读取到的nmemb数目。
叠合表明
范例

15.fseek(移动文件流的读写地点) 有关函数 rewind,ftell,fgetpos,fsetpos,lseek
表头文件 #include<stdio.h>
定义函数 int fseek(FILE * stream,long offset,int whence);
函数说明fseek()用来移动文件流的读写地方。参数stream为已开采的文书指针,参数offset为基于参数whence来移动读写地点的位移数。
参数 whence为下列个中一种:
SEEK_SET从距文件开端offset位移量为新的读写地方。SEEK_CUKoleos以近些日子的读写地方今后扩充offset个位移量。
SEEK_END将读写地方指向文件尾后再追加offset个位移量。
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的面世。
下列是较非常的选取办法: 1) 欲将读写地点移动到文件开首时:fseek(FILE *stream,0,SEEK_SET);
2) 欲将读写地点移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);
归来值 当调用成功时则再次来到0,若有荒唐则赶回-1,errno会贮存错误代码。
外加表达fseek()不像lseek()会回来读写地点,因而必得利用ftell()来获得近来读写的岗位。
范例

29.ungetc(将钦点字符写回文件流中) 连锁函数 fputc,getchar,getc
表头文件 #include<stdio.h>
定义函数 int ungetc(int c,FILE * stream);
函数表达ungetc()将参数c字符写回参数stream所内定的公文流。那么些写回的字符会由下二个读取文件流的函数获得。
回去值 成功则赶回c 字符,若有错误则赶回EOF。

复制代码 代码如下:

#include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
int main(){
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s.name,i,s.size);
}
执行
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11

复制代码 代码如下:

#include<stdio.h>
main()
{
FILE * fp;
int fd;
fp=fopen(“/etc/passwd”,”r”);
fd=fileno(fp);
printf(“fd=%d/n”,fd);
fclose(fp);
}
执行 fd=3

#include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
int main(){
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d/n”,i,s.name,i,s.size);
}
执行
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11

#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“noexist”,”w”);
for(i=0;i<26;i++)
fputc(a,fp);
fclose(fp);
}

1. fprintf 功效:传送格式化输出到一个文书中
表头文件:#include<stdio.h>
函数原型:int fprintf(FILE *stream, char *format[, argument,...]);
FILE* 二个FILE型的指针
char* 格式化输入函数,和printf里的格式同样
重临值:成功时重返调换的字节数,退步时回来三个负数
fp = fopen("/local/test.c","a+");
fprintf(fp,"%sn",str);

复制代码 代码如下:

本文由js333发布于计算机互联网,转载请注明出处:金沙js333娱乐场C语言文件操作函数大全,linux标准

关键词:

上一篇:java之正则表达式,正则表达式

下一篇:没有了