Linux系统编程-系统I/O 一. 系统I/O(文件I/O)文件I/OLinux内核向应用层提供的文件操作方法属于Linux系统调用文件描述符1、小的非负的整形数据1024个0-10232、操作系统为已打开的文件分配的一个标识符。3、分配原则最小未被使用原则4、文件IO操作文件面向文件描述符。5、操作系统默认已经打开了三个文件标准输入设备、标准输出设备、标准出错设备文件文件描述符fd文件流指针FILE*标准输入0(STDIN_FILENO)stdin标准输出1(STDOUT_FILENO)stdout标准错误2(STDERR_FILENO)stderr二. 系统I/O的函数接口2.1 open作用打开一个文件参数pathname文件路径flags文件打开标志mode八进制数指定文件的访问权限(一般0664即可)文件权限mode ~umaskumask的值可以通过命令umask查看一般是0002flags作用O_RDONLY只读O_WRONLY只写O_RDWR读写O_CREAT如果不存在就创建O_TRUNC如果存在就截断O_APPEND采用追加写的方式返回值成功返回一个文件描述符 失败返回-1并且设置errno2.2 close作用关闭一个文件描述符参数文件描述符fd返回值成功返回0 失败返回-1并且设置errno2.3 write作用向指定的文件描述符中写入buf中的count个字节返回值成功返回写入的字节数 0代表无东西可写 失败返回-1并且设置errno2.4 read作用从文件描述符fd中读取count个字节的数据到buf中返回值成功 返回读取的字节数 失败返回-1并且设置errnoeg使用read与write实现cp功能int main(int argc, const char *argv[]) { if(argc 3){ fprintf(stderr,Usage:...\n); return -1; } //打开文件 int fdsrc, fddst; fdsrc open(argv[1], O_RDONLY); if(fdsrc 0){ perror(open src():); return -1; } fddst open(argv[2], O_WRONLY | O_CREAT | O_TRUNC); if(fddst 0){ close(fdsrc); perror(open dst():); return -1; } //复制 char buf[512] { 0 }; ssize_t ret 0; while(ret read(fdsrc, buf, sizeof(buf))){ write(fddst, buf, ret); } //关闭文件 close(fddst); close(fdsrc); return 0; }