文件描述符
- pcb:结构体
- 一个进程有一个文件描述符:1024
- 文件描述符:寻找磁盘文件

函数open和openat
函数原型:
include<sys/stst.h>
#include<fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int openat(int fd, const char *pathname, int flags);
int openat(int fd, const char *pathname, int flags, mode_t mode);
函数的返回值:若成功,返回文件描述符; 若出错,返回-1
flag参数:必选项
| O_RDONLY | 只读打开 |
| O_WRONLY | 只写打开 |
| O_RDWR | 读、写打开 |
flag参数:可选项
| O_APPEND | 每次写时追加到文件的末尾 |
| O_CREAT | 若此文件不存在则创建它 |
| O_EXCL | 创建文件时检测文件是否存在,必须与O_CREAT一起使用 |
| O_TRUNC | 如果文件存在,而且只写或读写打开成功打开,则将其长度阶段为0 |
mode参数:mode &~ umask
测试代码:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
int main(int argc, const char *argv[])
{
int fd = open("hello", O_RDWR | O_CREAT, 0777);
if(fd == -1) {
printf("打开失败\n");
}
close(fd);
return 0;
}
输出结果:

本文详细介绍了文件描述符的概念及其在进程中的作用,深入解析了open和openat函数的使用方法,包括函数原型、返回值及各种flag参数的意义。通过示例代码展示了如何使用这些函数创建和操作文件。

825

被折叠的 条评论
为什么被折叠?



