当前位置:实例文章 » 其他实例» [文章]Linux基础IO(一)

Linux基础IO(一)

发布人:shili8 发布时间:2025-02-11 15:29 阅读次数:0

**Linux 基础 IO (一)****前言**

在 Linux 中,IO(Input/Output)是指数据的读取和写入操作。理解 Linux 的 IO机制对于开发高性能、低延迟的应用程序至关重要。在本文中,我们将介绍 Linux 基础 IO 的基本概念、API 和示例代码。

**1. 文件描述符**

在 Linux 中,每个进程都有一个文件描述符表(File Descriptor Table),用于管理打开的文件。文件描述符是进程与文件之间的一个抽象接口,通过它可以进行读取和写入操作。每个文件描述符都对应一个唯一的整数值。

c#include <stdio.h>

int main() {
 int fd = open("example.txt", O_RDONLY);
 if (fd == -1) {
 perror("open");
 return1;
 }

 // 使用文件描述符进行读取和写入操作 close(fd); // 关闭文件描述符 return0;
}


**2. 文件类型**

Linux 支持多种文件类型,包括:

* **普通文件**:这是最常见的文件类型,例如文本文件、图片等。
* **目录**:用于存储文件和子目录。
* **符号链接**:指向一个实际文件的快捷方式。
* **设备文件**:代表一个硬件设备或虚拟设备。

c#include <stdio.h>
#include <sys/stat.h>

int main() {
 struct stat sb;
 if (stat("example.txt", &sb) ==0) {
 printf("文件类型:%s
", sb.st_mode & S_IFMT == S_IFDIR ? "目录" : "普通文件");
 }

 return0;
}


**3. 文件权限**

Linux 使用位掩码来表示文件的读取、写入和执行权限。每个文件都有三个属性:

* **用户权限**:指的是所有者对文件的权限。
* **组权限**:指的是同组成员对文件的权限。
* **其他权限**:指的是非同组成员对文件的权限。

c#include <stdio.h>
#include <sys/stat.h>

int main() {
 struct stat sb;
 if (stat("example.txt", &sb) ==0) {
 printf("用户权限:%s
", (sb.st_mode & S_IRUSR ? "r" : "-") + (sb.st_mode & S_IWUSR ? "w" : "-") + (sb.st_mode & S_IXUSR ? "x" : "-"));
 printf("组权限:%s
", (sb.st_mode & S_IRGRP ? "r" : "-") + (sb.st_mode & S_IWGRP ? "w" : "-") + (sb.st_mode & S_IXGRP ? "x" : "-"));
 printf("其他权限:%s
", (sb.st_mode & S_IROTH ? "r" : "-") + (sb.st_mode & S_IWOTH ? "w" : "-") + (sb.st_mode & S_IXOTH ? "x" : "-"));
 }

 return0;
}


**4. 文件锁**

Linux 提供了文件锁机制,用于保护文件的读取和写入操作。有两种类型的文件锁:

* **共享锁**:允许多个进程同时读取一个文件。
* **独占锁**:只允许一个进程对一个文件进行读取或写入操作。

c#include <stdio.h>
#include <fcntl.h>

int main() {
 int fd = open("example.txt", O_RDWR);
 if (fd == -1) {
 perror("open");
 return1;
 }

 // 获取共享锁 if (flock(fd, LOCK_SH) !=0) {
 perror("flock");
 close(fd);
 return1;
 }

 // 使用文件描述符进行读取和写入操作 //释放共享锁 flock(fd, LOCK_UN);

 close(fd);
 return0;
}


**5. 文件映射**

Linux 提供了文件映射机制,用于将一个文件的内容映射到进程的虚拟地址空间。有两种类型的文件映射:

* **私有映射**:创建一个新的内存区域,用于存储文件的内容。
* **共享映射**:共享一个已有的内存区域,用于存储文件的内容。

c#include <stdio.h>
#include <sys/mman.h>

int main() {
 int fd = open("example.txt", O_RDONLY);
 if (fd == -1) {
 perror("open");
 return1;
 }

 // 获取私有映射 void* addr = mmap(NULL,1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,0);
 if (addr == MAP_FAILED) {
 perror("mmap");
 close(fd);
 return1;
 }

 // 使用文件描述符进行读取和写入操作 //释放私有映射 munmap(addr,1024);

 close(fd);
 return0;
}


**结论**

本文介绍了 Linux 基础 IO 的基本概念、API 和示例代码。理解这些内容对于开发高性能、低延迟的应用程序至关重要。在下一篇文章中,我们将继续讨论 Linux IO 的其他方面,包括文件描述符表、文件类型、文件权限、文件锁和文件映射等。

相关标签:算法c++开发语言
其他信息

其他资源

Top