详解Linux文件操作知识点

 更新时间:2018年09月14日 08:21:41   投稿:laozhang  
在本篇文章中我们给大家详细分享了关于Linux文件操作的相关知识点内容,有兴趣的朋友们可以学习下。

文件操作的相关系统调用

创建

int creat(const char *filename, mode_t mode);

参数mode 指定新建文件的存取权限,它同umask 一起决定文件的最终权限(mode&umask),其中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 open(const char *pathname,int flag,mode_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 设置用户的执行ID

S_ISGID 设置组的执行ID

mode标志也可以用数字来表示文件权限:

每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。

第一位表示设置用户ID

第二位表示设置组ID

第三位表示用户自己的权限位

第四位表示组的权限

第五位表示其他人的权限

open("test", O_CREAT, 10705);

上述语句等价于:

open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );

读写

int 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+、r+b、rb+ 以读写方式打开

w+、w+b、wh+ 以读写方式打开。如果文件不存在,则创建新文件,否则文件被截断

a+、a+b、ab+ 以读和追加方式打开。如果文件不存在,则创建新文件

读写

int 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文件。

/lost+found----一般情况下是空的,当系统意外崩溃或机器意外关机时会产生一些文件碎片放在这里。

/mnt----方便用户临时挂载别的文件系统的,如将光驱挂载在/mnt/上,进入该目录就可以查看光驱里的内容

media----自动识别一些设备挂载到这个目录下,例如U盘、光驱等等。

/opt----给主机额外安装软件所存放的目录

/proc----操作系统运行时,进程及内核信息(比如CPU、硬盘分区、内存信息等)存放在这里。它是系统内存的映射,存在在内存,通过直接访问这个目录来获取系统信息。

/root----超级权限用户的家目录

/sbin----超级权限用户的可执行命令存放目录,普通用户无权限执行这个目录下的命令

/tmp-----存放临时文件。

/usr-----系统应用程序和文件(如命令、帮助文件)存放程序的目录,类似于windows下的program files目录。

/var-----经常被修改的目录放在这个目录下,如日志文件

/sys----内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

/initrd---若在启动过程中使用了initrd 映像作为临时根文件系统,则在执行完其上的/linuxrc挂接真正的根文件系统后,原来的初始RAM文件系统被映射到/initrd目录。

Linux文件系统与设备驱动

相关文章

  • ubuntu/deepin制作快捷启动图标的方法

    ubuntu/deepin制作快捷启动图标的方法

    这篇文章主要介绍了ubuntu/deepin制作快捷启动图标的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Ubuntu下各种压缩与解压的方式小结

    Ubuntu下各种压缩与解压的方式小结

    这篇文章主要给大家介绍了在Ubuntu系统下各种压缩与解压的方式,其中包括.tar、.gz、.bz2、.bz、.Z、.tgz、.zip、.rar以及.lha等各个的解压与压缩方法,每一种都给出了示例代码,需要的朋友可以参考学习,一起来看看吧。
    2017-04-04
  • Apache中伪静态Rewrite的使用方法和URL重写规则表达式讲解

    Apache中伪静态Rewrite的使用方法和URL重写规则表达式讲解

    apache中的mod_rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求,主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式,允许通过它来改变Apache Web服务器的配置。
    2022-11-11
  • .htaccess使用方法总结

    .htaccess使用方法总结

    在利用.htaccess的Rewrite规则实现Discuz论坛的伪静态链接中已经提到过了.htaccess的重定向的使用,这里让我们来比较全面的了解一下.htaccess吧。
    2010-12-12
  • Linux系统下根目录扩容介绍

    Linux系统下根目录扩容介绍

    大家好,本篇文章主要讲的是Linux系统下根目录扩容介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 阿里云服务器CentOS 6.3下快速安装部署 LAMP 、vsftpd 环境的方法

    阿里云服务器CentOS 6.3下快速安装部署 LAMP 、vsftpd 环境的方法

    这篇文章主要介绍了阿里云服务器CentOS 6.3下快速安装部署 LAMP 、vsftpd 环境的方法的相关资料,需要的朋友可以参考下
    2016-02-02
  • 详解CentOS下Nginx如何禁止IP访问

    详解CentOS下Nginx如何禁止IP访问

    服务器的安全相信是每位运维人员最关心的问题,不知道大家在使用的时候会不会遇到很多的恶意IP攻击,最近公司的服务器就遇到了这个问题,这个时候就要用到Nginx 禁止IP访问了。本文介绍了详细的步骤,有同样问题的朋友们可以参考学习。
    2016-10-10
  • Linux十个新手命令分享

    Linux十个新手命令分享

    这篇文章主要介绍了Linux十个新手命令分享,然后介绍了几个其他常用命令,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 安装CentOS 6.x报错

    安装CentOS 6.x报错"Disk sda contains BIOS RAID metadata"解决方法

    今天在安装CentOS6.2的时候,当进到检测硬盘的时候,总是过不去,报错如下: Disk sda contains BIOS RAID metadata, but is not part of any recognized BIOS RAID sets. Ignoring disk sda,真是不知如何解决,下面小编把我的思路分享到脚本之家平台,需要的朋友参考下
    2019-11-11
  • linux环境下安装jdk和Tomcat详细步骤

    linux环境下安装jdk和Tomcat详细步骤

    大家好,本篇文章主要讲的是linux环境下安装jdk和Tomcat详细步骤,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收一下,方便下次浏览
    2021-12-12

最新评论