首页 运维 linux运维 Linux文件操作

Linux文件操作

Sep 13, 2018 pm 06:24 PM
linux

本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法。分享给大家供大家参考。具体如下:

文件操作的相关系统调用

创建

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文件系统目录结构

003vPl7Rty6E8kZRlAEdc690.jpg

  • /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文件系统与设备驱动

相关推荐:

linux 父目录权限影响子目录文件操作

python文件读写操作与linux shell变量命令交互执行的方法

 

 

以上是Linux文件操作的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1422
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1242
24
Linux体系结构:揭示5个基本组件 Linux体系结构:揭示5个基本组件 Apr 20, 2025 am 12:04 AM

Linux系统的五个基本组件是:1.内核,2.系统库,3.系统实用程序,4.图形用户界面,5.应用程序。内核管理硬件资源,系统库提供预编译函数,系统实用程序用于系统管理,GUI提供可视化交互,应用程序利用这些组件实现功能。

git怎么查看仓库地址 git怎么查看仓库地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 仓库地址,请执行以下步骤:1. 打开命令行并导航到仓库目录;2. 运行 "git remote -v" 命令;3. 查看输出中的仓库名称及其相应的地址。

vscode上一步下一步快捷键 vscode上一步下一步快捷键 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷键的使用方法:一步(向后):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎么运行java代码 notepad怎么运行java代码 Apr 16, 2025 pm 07:39 PM

虽然 Notepad 无法直接运行 Java 代码,但可以通过借助其他工具实现:使用命令行编译器 (javac) 编译代码,生成字节码文件 (filename.class)。使用 Java 解释器 (java) 解释字节码,执行代码并输出结果。

Linux的主要目的是什么? Linux的主要目的是什么? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。

sublime写好代码后如何运行 sublime写好代码后如何运行 Apr 16, 2025 am 08:51 AM

在 Sublime 中运行代码的方法有六种:通过热键、菜单、构建系统、命令行、设置默认构建系统和自定义构建命令,并可通过右键单击项目/文件运行单个文件/项目,构建系统可用性取决于 Sublime Text 的安装情况。

laravel安装代码 laravel安装代码 Apr 18, 2025 pm 12:30 PM

要安装 Laravel,需依序进行以下步骤:安装 Composer(适用于 macOS/Linux 和 Windows)安装 Laravel 安装器创建新项目启动服务访问应用程序(网址:http://127.0.0.1:8000)设置数据库连接(如果需要)

git软件安装 git软件安装 Apr 17, 2025 am 11:57 AM

安装 Git 软件包括以下步骤:下载安装包运行安装包验证安装配置 Git安装 Git Bash(仅限 Windows)

See all articles