php网站开发实例教程下载充值网站 模板
fputc
int fputc(int c, FILE *stream);
 功能:
     向流中写入一个字符
 参数:
     c:要写入的字符
     stream:文件流指针
 返回值:
     成功返回写入的字符ASCII码值
     失败返回EOF
fgetc
int fgetc(FILE *stream);
 功能:
     从流中读取一个字符
 参数:
     stream:文件流指针
 返回值:
     成功返回读到字符的ASCII码值
     读到文件末尾返回EOF(返回值与fputc一致)
     失败返回EOF -1
     c= fgetc(stdin);
     fputc(c,stdout);
     获取键盘上面的输入,显示到屏幕。
默认的流指针:
stdin --- 标准输入 
 stdout --- 标准输出 
 stderr --- 标准出错 --- 屏幕 
-->问题:如何用最短的代码实现用户任意输入并打印输出。
 要求用fgetc/fputc函数实现。
 
while(1) fputc(fgetc(stdin),stdout); 
feof
功能:
       判断当前参数stream的文件流指针是否到达文件结尾。
       如果到达文件结尾则返回真,否则返回假
       注意:该操作一定要在一次IO操作之后判断。
 参数:
       stream 要判断结尾的文件流对象
 返回值:成功到达结尾是 真
         否则 是假
fgets:
char *fgets(char *s, int size, FILE *stream);
 功能:
       从stream流对象关联的文件中获取size大小字节的文本数据
       并存储到s对应的本地内存(栈区数组,堆区内存)
       
 参数: s 要存储数据的本地内存
        size 要获取的数据长度,单位字节。
        stream 要获取的目标文件流对象,
         可以是stdin ,程序会阻塞等待
         如果是普通文件fp 则指向文件第一行数据
 返回值:成功 返回指向有效数据的首地址,一般等于s的地址
         失败 或者 文件末尾 NULL;
也就是说,由于传输的是字符串(字符串的储存方式是字符型数组),参数s与其返回值都是char*类型
fgets读取结束的条件:
1.EOF 文件结束 
 2.\n  读到 "换行符" 则读取结束 
   注意:
     会被保存到 buffer(保存数据的这块内存中)
 3.size-1 个字符 
   最后一个字符为'\0'    //按字符串读写,
fputs:
int fputs(const char *s, FILE *stream);
 功能:
        从s所在的本地内存中获取一行数据,
        并写入stream对应的文件流对象。
 参数: s 要写的信息,一般是固定的字符串或者有数据的数组。
        stream 要写入的目标文件流对象
返回值:成功 nonnegative number on success(成功写入的字符个数(非负数))
         失败 -1;
fread:
size_t  fread(void  *ptr,  size_t size, size_t nmemb, FILE *stream);
 功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr
       所在的本地内存中。
 参数:ptr 要存储数据的本地内存一般是数组或者结构体指针
       size 单个数据块的元数据大小。最小单元的大小(为保证数据不会被截断,一般为1)
       nmemb 要获取的数据块的个数,拷贝的数据块个数。(一般为sizeof(ptr))
       stream 要获取数据的源文件流对象,如果是stdin表示从
       键盘获取数据,如果是fp文件则表示从普通文件获取。
 返回值:
         成功 小于等于nemeb的整数,表示获取的数据长度
         失败 小于0,结尾 0;
fwrite:
size_t fwrite(const void  *ptr,  size_t  size,size_t nmemb, FILE *stream);
 功能:从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应
      的文件流对象中。
 参数:ptr 要写的数据块地址,一般是数组或者结构体指针
       size  要写的数据块元数据大小,单位是字节(为保证数据不会被截断,一般为1)
       nmemb 要写的数据块的个数(一般为sizeof(ptr))->1个1个读,到sizeof(ptr)为止
       stream 要写的目标文件流对象。如果是stdout则表示数据会
       写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。
返回值:成功 小于等于nmemb 的个数。
         失败 <0
fseek:
int fseek(FILE *stream, long offset, int whence);
功能:将stream流文件中的文件指针从whence位置开始
       偏移offset字节的长度。
 参数:stream  要移动文件指针的目标文件流对象。
       注意:不支持设备文件,一般用于普通文件。
       offset  要在文件内偏移的距离,单位字节。
                 如果值为整数,则向文件末尾偏移
               如果值为负数,则向文件开头偏移
       whence  偏移的起始位置,由系统定义的三个宏开始。
           SEEK_SET  文件的开头位置 
         SEEK_CUR  文件的当前位置
         SEEK_END  文件的末尾位置
返回值:    
     成功: 返回 0
     失败:  -1;
如果从文件的指定位置向后偏移过程中已经超过了文件
 的当前末尾位置,则会自动以'\0'来填充文件内容,从
 而形成一种被称为"空洞文件" 的特殊文件。(例如判断是否有足够大的空间供下载)
feek(fp,0,SEEK_END);
fputs("",fp); 
因为fputs的第一个参数要求是char *,因此用""来代表'\0'
ftell:
long int ftell(FILE *stream)
功能:返回流指针相对于文件起始位置的偏移量
参数:流指针FILE *stream
返回值:该函数返回返回流指针相对于文件起始位置的偏移量。如果发生错误,则返回 -1,否则为正值
rewind:
void rewind(FILE *stream)
- 将文件指针定位到文件的开始位置。
 - 清空与文件流相关的所有错误指示符。
 
文件I/O汇总:
    fopen();    //开
     fclose();   //关
     
     fputc/fgetc    //读,写
     fputs/fgets
     fwrite/fread
     
     fseek,  //偏移
     ftell,  //定位
     rewind  //重定向(回开头)
