Linux下I/O编程
2023-12-16 17:38:51
系统调用
在 Linux 中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间
(也就是常称的内核态和 用户态),它们分别运行在不同的级别上,在逻辑上是
相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。
常见的文件I/O
/***************************open And close *********************/
int open(const char *pathname, int flags);
int open(const char *pathname, //路径
int flags, //模式(是指对文件内容)
mode_t mode //文件权限(仅创建文件有效)
); //创建/读写文件时都可用次函数
int creat(const char *pathname, //路径
mode_t mode //文件权限
);
int close(
int fd; //文件描述符
);
/****************************read****************************/
int open(const char *pathname, int flags);
int open(const char *pathname, //路径
int flags, //模式(是指对文件内容)
mode_t mode //文件权限(仅创建文件有效)
); //创建/读写文件时都可用次函数
int creat(const char *pathname, //路径
mode_t mode //文件权限
);
int close(
int fd; //文件描述符
);
/****************************write****************************/
ssize_t write( //返回成功写入的字节数,否则返回-1
int fd, //文件描述符
const void *buf, //缓冲区
size_t count //期望写入的字节数
);
/**********************fcntl(文件操作)*******************************/
#include <unistd.h>
#include <fcntl.h>
int fcntl(
int fd, //文件描述符
int cmd, //操作指令
... /* arg */ //可变参数,因操作指令而异
);
/****************************lseek**********************************/
1.每个打开的文件都有一个与其相关的相关的“文件位置”。(相同文件以不同的模式打开,文件起始位置可能不同,例如指定了O_APPEND 追加,文件位置在最后)
2.lseek函数仅将文件位置记录在内核中,并不引发任何I/0动作。
3.在超越文件尾的文件位置写入数据,将在文件中形成空洞。
4.文件空洞不占用磁盘空间,但被算在文件大小内。
off_t lseek(
int fd, //文件描述符
off_t offset, //偏移量
int whence //起始位置
);
//除非文件模式为 O_APPEND追加模式,否则文件位置一律为0。
SEEK_SRT 文件头
SEEK_CUR 当前位置
SEEK_END 从文件尾
/*********************************dup/dup2**********************/
//成功返回oldfd的副本,失败返回-1
int dup(int oldfd); //返回一个未被使用的最小文件描述符,且文件已打开
int dup2(int oldfd, int newfd);//可以指定文件描述符的值,若描述符已打开,则先关闭,返回文件描述副本。
文章来源:https://blog.csdn.net/qq_52575999/article/details/135034942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!