Linux下一切皆文件
一、文件的分类
学习链接:【精选】7种文件类型+3种查看+文件属性+扩展名_七种文件类型-CSDN博客
二、对标准IO文件的相关操作
1、打开
(1)open--打开普通文件
如果需要别的权限,要使用 | 形式拼装
O_EXCL
:如果文件已经存在,则打开操作失败。通常与
O_CREAT
一起使用,用于确保创建新文件而不覆盖已存在的文件。
O_CREAT
:如果文件不存在,则创建文件。如果文件已存在,它不会被截断,而只是打开。
O_TRUNC
:如果文件已经存在,将文件长度清为
0
。这将删除文件的现有内容。
O_APPEND
:将文件指针设置到文件末尾,以便所有写入操作都追加到文件末尾,而不是覆盖现有内容。
O_NONBLOCK
:以非阻塞模式打开文件。在非阻塞模式下,读取和写入操作将不会被阻塞,即使没有可用 的数据或空间。
O_NDELAY
同
O_NONBLOCK
O_SYNC
:要求所有
I/O
操作是同步的,即写入操作完成后,才返回。这可以确保数据写入到磁盘而不是缓存在内存中。
O_DIRECTORY
:要求打开的是一个目录而不是文件。用于确保只能打开目录。
O_NOFOLLOW
:如果
pathname
是一个符号链接,则打开操作失败。用于防止解引用符号链接。
O_DIRECT
:要求绕过内核缓存,直接在应用程序和存储设备之间进行数据传输。通常用于低级
I/O
操作和性能优化。
O_TMPFILE
:创建一个临时文件,该文件在关闭后会自动删除。适用于需要临时文件的场景。
O_NOCTTY
如果欲打开的文件为终端机设备时
,
则不会将该终端机当成进程控制终端机。
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
int main()
{
int fd = 0;
fd = open("1.txt",O_RDONLY|O_CREAT,0754);
if(fd == -1)
{
perror("open error");
return -1;
}
printf("open ok\n");
close(fd);
return 0;
}
(2)opdir--打开目录文件
2、操作
(1)文件的读和写
案例1:
(2)目录的读和写
案例:
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
int main() {
DIR *dir;
struct dirent *ptr;
int i;
dir = opendir("."); // 打开当前目录
if (dir == NULL) {
perror("Error opening directory");
return 1;
}
while ((ptr = readdir(dir)) != NULL) {
printf("dname: %s\n", ptr->d_name);
}
closedir(dir);
return 0;
}