网站建设财务项目管理制度,网页设计首页多少钱一页,网络平台怎么搭建网站,抖音seo关键词优化排名文章目录 一、linux文件权限1.1文件描述符1.2文件描述符的范围和默认值1.3打开文件和文件描述符1.4标准文件描述符1.5文件描述符的重定向和关闭1.6I/O 操作1.7使用文件描述符进行进程通信1.8资源限制 二、C语言文件读写2.1open 函数2.2 flags参数详解2.3 lseek 函数 一、linux文… 文章目录 一、linux文件权限1.1文件描述符1.2文件描述符的范围和默认值1.3打开文件和文件描述符1.4标准文件描述符1.5文件描述符的重定向和关闭1.6I/O 操作1.7使用文件描述符进行进程通信1.8资源限制 二、C语言文件读写2.1open 函数2.2 flags参数详解2.3 lseek 函数 一、linux文件权限
字符表示法 二进制 十进制 说明
r - - 100 4 仅可读
- w - 010 2 仅可写
- - x 001 1 仅可执行
r w - 110 6 可读可写
r - x 101 5 可读可执行
- w x 011 3 可写可执行
r w x 111 7 可读可写可执行
- - - 000 0 无权限1.1文件描述符
在 Linux 系统中文件描述符是用于访问文件、设备、套接字和其他 I/O 资源的抽象概念。它是一个非负整数用于唯一标识一个打开的文件或者 I/O 通道。Linux 将所有的 I/O 资源包括文件、管道、套接字等都视为文件并通过文件描述符进行访问。
下面是文件描述符的一些关键特性和使用情况
1.2文件描述符的范围和默认值
文件描述符的范围通常是从 0 开始递增的整数。0、1 和 2 分别是标准输入、标准输出和标准错误输出的文件描述符。在大多数情况下系统会将第一个打开的文件赋予文件描述符 3然后依次递增分配给其他打开的文件或者 I/O 通道。
1.3打开文件和文件描述符
使用系统调用如 open()、socket()、pipe() 等来打开文件或创建 I/O 通道时会返回一个文件描述符。例如open() 打开文件后返回一个文件描述符你可以使用这个描述符进行读取、写入或其他操作。
1.4标准文件描述符
0标准输入stdin1标准输出stdout2标准错误输出stderr
1.5文件描述符的重定向和关闭
可以使用系统调用如 dup()、dup2() 来复制文件描述符或者将一个文件描述符重定向到另一个文件描述符上。使用 close() 可以关闭一个文件描述符释放系统资源。关闭文件描述符后相应的文件或 I/O 通道不再被该描述符引用。
1.6I/O 操作
通过文件描述符可以进行读取、写入、定位文件指针和其他 I/O 操作。例如read()、write() 等系统调用使用文件描述符来执行对文件的读取和写入操作。
1.7使用文件描述符进行进程通信
文件描述符在进程间通信IPC中扮演重要角色比如通过管道、套接字、匿名管道等进行进程间通信时文件描述符的传递和共享是常见的做法。
1.8资源限制
系统对文件描述符数量有限制可通过 ulimit 命令查看和设置文件描述符的数量限制。
文件描述符的使用对于在 Linux 系统下进行 I/O 操作和进程通信非常重要。它提供了一种标准化的方法来访问不同类型的 I/O 资源简化了对文件和其他 I/O 设备的操作。
二、C语言文件读写
int open(const char *pathname, int flags);2.1open 函数
open 函数用于打开一个文件并返回一个文件描述符file descriptor这个描述符可以用于后续的文件读写操作。
语法
#include sys/types.h
#include sys/stat.h
#include fcntl.hint open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);pathname 是要打开的文件的路径名。 flags 是打开文件时的标志它可以指定文件的打开方式例如只读、只写、追加等。一些常用的标志包括 O_RDONLY: 只读方式打开文件O_WRONLY: 只写方式打开文件O_RDWR: 读写方式打开文件O_CREAT: 如果文件不存在则创建文件O_APPEND: 追加方式打开文件等等可以使用按位或 | 连接多个标志。 mode 是一个权限参数仅在使用 O_CREAT 标志创建文件时才需要。它指定了文件的权限比如 0644。
返回值
如果成功open 函数返回一个非负整数的文件描述符可以用于后续的文件 I/O 操作。如果失败返回值为 -1并设置全局变量 errno 表示出错的原因。
示例
#include fcntl.h
#include stdio.h
#include errno.hint main() {int fd;fd open(example.txt, O_WRONLY | O_CREAT, 0644);if (fd -1) {perror(open);return 1;}// 可以在这里进行文件写操作等close(fd);return 0;
}2.2 flags参数详解
O_CREAT:在文件打开过程中创建新文件O_RDONLY以只读方式打开文件。O_WRONLY以只写方式打开文件。O_RDWR以读写方式打开文件。O_APPEND在文件末尾追加数据而不是覆盖现有内容。O_TRUNC如果文件已经存在将其截断为空文件。O_EXCL与 O_CREAT 一起使用时如果文件已经存在则 open() 调用将失败。O_SYNC使文件写操作变为同步写入即将数据立即写入磁盘。O_NONBLOCK以非阻塞方式打开文件即使无法立即进行读写操作也不会被阻塞。
当文件为空的时候文件指针初始化指向0的位置随着写入文件指针会落到最后一个字符的后面。当文件描述符被关闭后重新使用open函数文件指针会指向0。
2.3 lseek 函数
lseek 函数用于移动文件描述符指向文件中的位置。
语法
#include sys/types.h
#include unistd.hoff_t lseek(int fd, off_t offset, int whence);fd 是文件描述符通过 open 函数获取。offset 是偏移量可以是正数、负数或零用来指定相对于 whence 的偏移量。whence 用于确定 offset 是相对于文件开始位置、当前位置还是文件末尾位置有三个可选值 SEEK_SET偏移量相对于文件开头SEEK_CUR偏移量相对于当前位置SEEK_END偏移量相对于文件末尾
返回值
如果成功lseek 函数返回从文件开头到新的文件位置的偏移量。如果失败返回值为 -1并设置全局变量 errno 表示出错的原因。
示例
#include fcntl.h
#include stdio.h
#include unistd.h
#include errno.hint main() {int fd;off_t offset;fd open(example.txt, O_RDONLY);if (fd -1) {perror(open);return 1;}// 设置文件偏移量到文件末尾offset lseek(fd, 0, SEEK_END);if (offset -1) {perror(lseek);close(fd);return 1;}printf(File size: %ld bytes\n, offset);close(fd);return 0;
}这些函数是 C 语言中用于文件操作的基础函数可以通过它们来进行文件的打开、关闭、读写以及定位操作。
下面是一个操作文件的例子
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include stdio.h
#include unistd.h
#include string.h
#include stdlib.hint main()
{char *buf 你好啊 世界!; int fd open(./file1, O_RDWR); // 尝试以读写模式打开名为 file1 的文件if (fd -1){printf(open file1 failed\n); // 如果文件打开失败输出错误消息fd open(./file1, O_RDWR | O_CREAT, 0600); // 以读写模式和创建标志创建名为 file1 的新文件文件权限为 0600if (fd 0){printf(create file1 success!\n); // 如果成功创建文件输出成功消息}}printf(open success: fd %d\n, fd); // 打印文件描述符int write_num write(fd, buf, strlen(buf)); // 向文件写入内容返回写入的字节数if (write_num ! -1){printf(write %d bytes to file\n, write_num); // 打印成功写入的字节数}off_t offset -21; // 设置偏移量为负数lseek(fd, -21, SEEK_CUR); // 在当前位置偏移 -21 个字节// 读取数据char *temp (char*)malloc(sizeof(char) * write_num 1);read(fd,temp,100);printf(%s\n,temp);close(fd); // 关闭文件return 0;
} 参考文章
推荐文章Linux 文件基本属性