14.文件

1.文件

a.FILE所有平台的名字都一样,FILE是一个结构体类型,里面的成员功能一样,不同平台成员的名字不一样

FILE *fp;

typedef struct
{
  short                level;           //缓冲区满或空的程度
  unsigned          flags            //文件状态标志
  char                 fd;              //文件描述符
  unsigned char   hold;          //如无缓冲区不读取字符
  short                bsize;       //缓冲区的大小
  unsigned char   *buffer;    //缓冲区的位置
  unsigned          ar;             //指针当前指向
  unsigned          istemp;     //临时文件
  short               token;       //用于有效性的检查
}

b.fp指针,只调用了fopen(),在堆区分配空间,把地址返回给fp;

c.fp指针不是指向文件,fp指针和文件关联,fp内部成员保存了文件的状态;

 d.操作fp指针,不能直接操作,必须通过文件库函数来操作fp指针;

e.通过库函数操作指针,对文件的任何操作,fp里面的成员会相应的变化(系统自动完成)。

2.文件分类

a.磁盘文件

b.设备文件

3.文件操作

(1).打开文件fopen()

(2).读写文件

a.按字符读写fgetc(),fputc();

b.按字符串(行)读取文件fget(),fputc();

c.文件结尾判断feof();

(3).关闭文件fclose()

4.相对路径

Linux下的相对路径是相对于可执行程序;

5.fputc()

/**
   * 功能:将ch转换为unsigned char后写入stream指定的文件中
   * 参数:
   *     ch:需要写入文件的字符
   *     stream:文件指针
   * 返回值:成功,成功写入文件的字符
   *       失败,-1
   */
int fputc(int ch, FILE *stream);

1).先打开文件

 (2).一次只能写入一个字符;

(3).关闭文件

6.fgetc()

读文件,每次读一个文件;

*文本文件,可以以-1(EOF)判断是否为文件结尾,二进制文件则不可以;

7.feof()

int read_file_off()
{
 FILE *pf = fopen("7.txt","r");
 while(1)
{
   printf(”文件没有结尾\n“);
   int ch = fget(fp);    //读取,目的是为了判断是否结尾
   printf("ch = %d\n",ch);

   if(feof(fp))            //如果文件到结尾,跳出
   {
      break;
    }
 }
  fclose(fp);      //关闭文件
  return 0;
}

判断文件是否结尾,任何文件都可以判断;

a.如果第一次没有对文件进行读操作,直接调用此函数,永远返回真;

b.调用此函数,必须先读,再调用feof()才有意义;

c.调用此函数,光标不会自动往后移动;

d.必须读取后,才能判断是否结束,判断的是读取的字符;

8.cat命令

9.fgets()

按行读取

10.fputs() 

按行写

 11.产生随机数:srand((unsigned int)(time(NULL))

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

 12fsprintf()

写文件

*sscanf()和ssprintf()格式化到字符串;

13.fscanf()

 

读取文件内容;

14.fwrite()和fread()

 文件内容块读写;

15.windows和Linux文件区别

windows平台换行符“\r\n”;

linux平台换行符“\n”; 

16.随机位置读写

 

int fseek(FILE *stream, long offset, int whence);
//相关宏定义:
//SEEK_SET:从文件开头移动offset个字节
//SEEK_CUR:从当前位置移动offset个字节
//SEEK_END:从文件末尾移动offset个字节
fseek(fp,0,SEEK_SET);//在开头偏移0个字节,回到开头;开头不能往左移,末尾可以往后移

 

posted @ 2019-01-07 20:54  西贡小傻  Views(125)  Comments(0Edit  收藏  举报