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文件系统目录结构
/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文件系统与设备驱动
相关推荐:
python文件读写操作与linux shell变量命令交互执行的方法
以上是Linux文件操作的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

CentOS 和 Ubuntu 的关键差异在于:起源(CentOS 源自 Red Hat,面向企业;Ubuntu 源自 Debian,面向个人)、包管理(CentOS 使用 yum,注重稳定;Ubuntu 使用 apt,更新频率高)、支持周期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社区支持(CentOS 侧重稳定,Ubuntu 提供广泛教程和文档)、用途(CentOS 偏向服务器,Ubuntu 适用于服务器和桌面),其他差异包括安装精简度(CentOS 精

CentOS 安装步骤:下载 ISO 映像并刻录可引导媒体;启动并选择安装源;选择语言和键盘布局;配置网络;分区硬盘;设置系统时钟;创建 root 用户;选择软件包;开始安装;安装完成后重启并从硬盘启动。

CentOS 已停止维护,替代选择包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(与 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商业版,付费许可);5. Oracle Linux(与 CentOS 和 RHEL 兼容)。在迁移时,考虑因素有:兼容性、可用性、支持、成本和社区支持。

如何使用 Docker Desktop?Docker Desktop 是一款工具,用于在本地机器上运行 Docker 容器。其使用步骤包括:1. 安装 Docker Desktop;2. 启动 Docker Desktop;3. 创建 Docker 镜像(使用 Dockerfile);4. 构建 Docker 镜像(使用 docker build);5. 运行 Docker 容器(使用 docker run)。

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

CentOS 停止维护后,用户可以采取以下措施应对:选择兼容发行版:如 AlmaLinux、Rocky Linux、CentOS Stream。迁移到商业发行版:如 Red Hat Enterprise Linux、Oracle Linux。升级到 CentOS 9 Stream:滚动发行版,提供最新技术。选择其他 Linux 发行版:如 Ubuntu、Debian。评估容器、虚拟机或云平台等其他选项。

Docker镜像构建失败的故障排除步骤:检查Dockerfile语法和依赖项版本。检查构建上下文中是否包含所需源代码和依赖项。查看构建日志以获取错误详细信息。使用--target选项构建分层阶段以识别失败点。确保使用最新版本的Docker引擎。使用--t [image-name]:debug模式构建镜像以调试问题。检查磁盘空间并确保足够。禁用SELinux以防止干扰构建过程。向社区平台寻求帮助,提供Dockerfile和构建日志描述以获得更具体的建议。

VS Code 系统要求:操作系统:Windows 10 及以上、macOS 10.12 及以上、Linux 发行版处理器:最低 1.6 GHz,推荐 2.0 GHz 及以上内存:最低 512 MB,推荐 4 GB 及以上存储空间:最低 250 MB,推荐 1 GB 及以上其他要求:稳定网络连接,Xorg/Wayland(Linux)
