一,标准IO和文件IO的区别
1.标准IO是库函数,是对系统调用的封装
 2.文件IO是系统调用,时linux内核中的函数接口
 3.标准IO是有缓存的,文件IO是没有缓存的(实时性强)
二,文件IO
1.三步操作:
打开->读/写->关闭(open - > read/write - > close )
2..打开文件:
        open 
         int open(const char *pathname, int flags);
         int open(const char *pathname, int flags, mode_t mode);
         功能:
             打开文件并且获得文件描述符
         参数:
             pathname:要打开的文件名
             flags:标志位
                 O_RDONLY    只读
                 O_WRONLY    只写
                 O_RDWR      读写
                 
                 O_APPEND    追加
                 O_ASYNC     异步IO
                 O_CREAT     文件不存在创建
                 O_TRUNC     文件存在截断(清0)
         返回值:
             成功返回文件描述符(很小的非负整数)
             失败返回-1 
新生成的文件描述符总是为尚未被使用的最小的非负整数
        0: stdin
         1: stdout
         2: stderr
  
3.标准IO权限写法 文件IO的权限写法
 r         只读             -----------   O_RDONLY(只读)
  r+       读写             -----------   O_RDWR(读写)
  w        只写             -----------   O_WRONLY | O_CREAT | O_TRUNC,0664(只写 | 创建 | 清0)
  w+      写读             -----------   O_RDWR | O_CREAT | O_TRUNC, 0664(读写|创建|清0)
  a        追加只写      -----------   O_WRONLY | O_CREAT | O_APPEND, 0664(只写|创建|追加)
  a+      追加写读      -----------   O_RDWR | O_CREAT | O_APPEND, 0664(读写|创建|追加)
注意:0664 是 起到一个权限作用 ,只要有O_CREAT 就需要添加0664.
  
4.关闭文件:
        close 
         int close(int fd);
         功能:
             将fd对应的文件描述符关闭
5.读写:
        read/write 
         1.write
           ssize_t write(int fd, const void *buf, size_t count);
           功能:
             向fd对应的文件中写入buf指向的count个字节
           参数:
             fd:文件描述符
             buf:写入数据空间首地址
             count:写入的字节数
           返回值:
             成功返回实际写入字节数
             失败返回-1
int main(void)                         //write用法
{int fd = 0;char tmpbuff[4096] = {"hello world"};fd = open("a.txt",O_WRONLY | O_CREAT | O_TRUNC,0664);      if(fd == -1){perror("fail to open");return -1;}write(fd,tmpbuff,strlen(tmpbuff));close(fd);return 0;}
          2.read 
           ssize_t read(int fd, void *buf, size_t count);
           功能:
             从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
           参数:
             fd:文件描述符 
             buf:存放数据空间的首地址
             count:想要读取数据字节数
           返回值:   
             成功返回实际读到的字节数
             失败返回-1 
             读到文件末尾返回0 
int main(void)                         //read用法
{int fd = 0;char tmpbuff[4096] = {0};ssize_t nret = 0;                 //定义一个接收返回值的变量fd = open("a.txt",O_RDONLY);      if(fd == -1)	{perror("fail to open");return -1;}nret = read(fd,tmpbuff,sizeof(tmpbuff));  //nret返回值返回的是实际读到的个数printf("%ld\n",nret);printf("%s\n",tmpbuff);close(fd);return 0;}
注意:求字符串长度用sizeof,对二进制数据使用strlen
            printf的字符最后没有‘\0’