Linux下C语言文件如何操作
Linux下C语言文件如何操作
前言:咱们在这一节将要探讨linux下文件操作的各个函数。
1.文件的创立和读写2.文件的各个属性3.目录文件的操作4.管道文件
1:文件的创立和读写我假如你已经晓得了规范级的文件操作的各个函数(fopen,fread,fwrite等等)。当然假如你不清晰的话也不要着急。咱们探讨的体系级的文件操作实际上是为规范级文件操作服务的。
当咱们须要关上一个文件进行读写操作的时候,咱们能够运用体系调用函数open.运用实现以后咱们调用另外一个close函数进行关闭操作。
#include
int open(const char *pathname,int flags);int open(const char *pathname,int flags,mode_t mode);
int close(int fd);
open函数有两个情势。其中pathname是咱们要关上的文件名(包含路径名称,缺省是以为在当前路径下面)。flags能够去下面的一个值或许是几个值的组合。
O_RDONLY:以只读的方式关上文件。
O_WRONLY:以只写的方式关上文件。
O_RDWR:以读写的方式关上文件。
O_APPEND:以追加的方式关上文件。
O_CREAT:创立一个文件。
O_EXEC:假如运用了O_CREAT而且文件已经存在,就会发生一个错误。
O_NOBLOCK:以非阻塞的方式关上一个文件。
O_TRUNC:假如文件已经存在,则删除文件的内容。
前面三个标记只能运用任意的一个。假如运用了O_CREATE标记,那么咱们要运用open的第二种情势。还要指定mode标记,用来表示文件的访问权限。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 设置用户履行ID S_ISGID 设置组的履行ID
咱们也能够用数字来代表各个位的标记。Linux总共用5个数字来表示文件的各种权限。
00000.第一位表示设置用户ID.第二位表示设置组ID,第三位表示用户自己的权限位,第四位表示组的权限,最后一位表示其余人的权限。
每个数字能够取1(履行权限),2(写权限),4(读权限),0(什么也没有)或许是这几个值的和。
比方咱们要创立一个用户读写履行,组没有权限,其余人读履行的文件。设置用户ID位那么咱们能够运用的模式是——1(设置用户ID)0(组没有设置)7(1+2+4)0(没有权限,运用缺省)5(1+4)即10705:open(\"temp\",O_CREAT,10705);假如咱们关上文件成功,open会返回一个文件描写符。咱们以后对文件的一切操作就能够对这个文件描写符进行操作了。
当咱们操作实现以后,咱们要关闭文件了,只有调用close就能够了,其中fd是咱们要关闭的文件描写符。
文件关上了以后,咱们就要对文件进行读写了。咱们能够调用函数read和write进行文件的读写。
#include
ssize_t read(int fd, void *buffer,size_t count);ssize_t write(int fd, const void *buffer,size_t count);
fd是咱们要进行读写操作的文件描写符,buffer是咱们要写入文件内容或读出文件内容的内存地址。count是咱们要读写的字节数。
对于普通的文件read从指定的文件(fd)中读取count字节到buffer缓冲区中(记住咱们必需供给一个足够大的缓冲区),同时返回count.假如read读到了文件的结尾或许被一个信号所中止,返回值会小于count.假如是由信号中止引起返回,而且没有返回数据,read会返回-1,且设置errno为EINTR.当程序读到了文件结尾的时候,read会返回0. write从buffer中写count字节到文件fd中,成功时返回实际所写的字节数。
下面咱们学习一个实例,这个实例用来拷贝文件。
#include
#define BUFFER_SIZE 1024
in