详解Linux文件操作知识点 创建int creat(const char *filename, mode_t mode);参数mode 指定新建文件的存取权限它同umask 一起决定文件的最终权限modeumask其中umask 代表了文件在创建时需要去掉的一些存取权限它只影响读、写和执行权限调用函数为int umask(int newmask)。打开int open(const char *pathname, int flags);pathname是我们要打开的文件名包含路径名称默认在当前路径下flags打开的标志O_RDONLY 以只读的方式打开文件O_WRONLY 以只写的方式打开文件O_RDWR 以读写的方式打开文件O_APPEND 以追加的方式打开文件O_CREAT 创建一个文件O_EXEC 如果使用了O_CREAT而且文件已经存在就会发生一个错误O_NOBLOCK 以非阻塞的方式打开一个文件O_TRUNC 如果文件已经存在则删除文件的内容int openconst char *pathname,int flagmode_t mode当flag为O_CREATE指定mode标志用来表示文件的访问权限S_IRUSR 用户可以读S_IWUSR 用户可以写S_IXUSR 用户可以执行S_IRWXU 用户可以读、写、执行S_IRGRP 组可以读S_IWGRP 组可以写S_IXGRP 组可以执行S_IRWXG 组可以读、写、执行S_IROTH 其他人可以读S_IWOTH 其他人可以写S_IXOTH 其他人可以执行S_IRWXO 其他人可以读、写、执行S_ISUID 设置用户的执行IDS_ISGID 设置组的执行IDmode标志也可以用数字来表示文件权限每个数字可以取1执行权限、2写权限、4读权限、0无或者是这些值的和。第一位表示设置用户ID第二位表示设置组ID第三位表示用户自己的权限位第四位表示组的权限第五位表示其他人的权限open(test, O_CREAT, 10705);上述语句等价于open(test, O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );读写12int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);参数fd文件描述符buf为指向缓冲区的指针length为缓冲区的大小以字节为单位返回值为实际读取和写入的字节数。read( )实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中返回值为实际读取的字节数write( )实现将把length 个字节从buf 指向的缓冲区中写到文件描述符fd所指向的文件中返回值为实际写入的字节数。定位对于随机文件我们可以随机地指定位置读写int lseek(int fd, offset_t offset, int whence);lseek()将文件读写指针相对whence移动offset可取负值个字节。操作成功时返回文件指针相对于文件头的位置。参数whence可以使用如下值SEEK_SET相对文件开头。SEEK_CUR相对文件读写指针的当前位置。SEEK_END相对文件末尾。关闭int close(int fd);C库函数的文件操作——独立于具体的操作系统平台创建和打开FILE *fopen(const char *path, const char *mode);fopen()实现打开指定文件filename其中的mode为打开模式Linux 系统不区分二进制文件和文本文件。mode的值r、rb 以只读方式打开w、wb 以只写方式打开。如果文件不存在则创建该文件否则文件被截断a、ab 以追加方式打开。如果文件不存在则创建该文件r、rb、rb 以读写方式打开w、wb、wh 以读写方式打开。如果文件不存在则创建新文件否则文件被截断a、ab、ab 以读和追加方式打开。如果文件不存在则创建新文件读写1234567891011int fgetc(FILE *stream);int fputc(int c, FILE *stream);char *fgets(char *s, int n, FILE *stream);int fputs(const char *s, FILE *stream);int fprintf(FILE *stream, const char *format, ...);int fscanf (FILE *stream, const char *format, ...);size_t fread(void *ptr, size_t size, size_t n, FILE *stream);size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);int fsetpos(FILE *stream, fpos_t *pos);nt fsetpos(FILE *stream, const fpos_t *pos);int fseek(FILE *stream, long offset, int whence);fread()实现从stream中读取n 个字段每个字段为size个字节并将读取的字段放入ptr 所指的字符数组中返回实际已读取的字段数。write()实现从缓冲区ptr 所指的数组中把n 个字段写到stream 中每个字段长为size个字节返回实际写入的字段数。关闭int fclose (FILE *stream);Linux文件系统目录结构/bin----存放着最经常使用的基本命令如ls、cp、mkdir 等这个目录中的文件都是可执行的。/boot----启动Linux时使用的一些核心文件包括一些连接文件以及镜像文件如vmlinuz、initrd.img/dev----设备文件存储目录应用程序通过对这些文件的读写和控制就可以访问实际的设备。/etc----系统管理所需要的配置文件和子目录如用户账号及密码配置文件。/home----普通用户的家目录每个用户都有一个自己的目录一般该目录名是以用户的账号命名的。/lib----库文件存放目录系统最基本的动态连接共享库类似于Windows里的DLL文件。/lostfound----一般情况下是空的当系统意外崩溃或机器意外关机时会产生一些文件碎片放在这里。/mnt----方便用户临时挂载别的文件系统的如将光驱挂载在/mnt/上进入该目录就可以查看光驱里的内容media----自动识别一些设备挂载到这个目录下例如U盘、光驱等等。/opt----给主机额外安装软件所存放的目录/proc----操作系统运行时进程及内核信息比如CPU、硬盘分区、内存信息等存放在这里。它是系统内存的映射存在在内存通过直接访问这个目录来获取系统信息。/root----超级权限用户的家目录/sbin----超级权限用户的可执行命令存放目录普通用户无权限执行这个目录下的命令/tmp-----存放临时文件。/usr-----系统应用程序和文件如命令、帮助文件存放程序的目录类似于windows下的program files目录。/var-----经常被修改的目录放在这个目录下如日志文件/sys----内核设备树的一个直观反映。当一个内核对象被创建的时候对应的文件和目录也在内核对象子系统中被创建。/initrd---若在启动过程中使用了initrd 映像作为临时根文件系统则在执行完其上的/linuxrc挂接真正的根文件系统后原来的初始RAM文件系统被映射到/initrd目录。