近期学习了下嵌入式Linux应用编程,一边学习一边记录下关键知识,也是在学习的过程进行下简单梳理。
文件I/O
用户在应用开发过程中会经常需要访问文件。Linux下访问文件的方式有两大类:标准I/O和文件I/O。
文件I/O特点:
(1)posix(可移植操作系统接口)定义的一组函数。
(2)不带缓冲机制,每次操作都引起系统调用。
(3)通过文件描述符来访问文件。
(4)访问各种类型文件(7种:- d c b s l p)。
1、文件类型
-:普通文件:可执行文件、文本文档、脚本
d:目录文件
c:字符设备
b:块设备
s:网络设备、socket
l:软链接
p:管道
2、文件描述符
每个打开的文件都对应一个文件描述符。
文件描述符是一个非负整数。Linux为程序中每个打开的文件分配一个文件描述符。
文件描述符从0开始分配,依次递增。
在文件IO中默认打开了三个文件描述符0,1,2。对应标准输入、标准输出、标准出错。
3、接口
- 打开文件
int open(const char *pathname, int flags);
功能:打开一个文件,并且返回一个文件描述符供后续读写类接口使用。 - 读文件
ssize_t read(int fd, void *buf, size_t count);
功能:从文件描述符为fd的文件/设备读取最大count个字节的数据 - 写文件
ssize_t write(int fd, const void *buf, size_t count);
功能:从buf写入到fd文件中,最大写count个字节 - 文件定位
off_t lseek(int fd, off_t offset, int whence);
功能:实现文件的定位操作 - 获取文件信息
int stat(const char *path, struct stat *buf);
功能:获取文件信息 - 关闭文件
int close(int fd);
功能:关闭fd文件 - 创建目录
int mkdir(const char *pathname, mode_t mode);
功能:创建一个目录 - 打开目录
DIR *opendir(const char *name);
功能:获得目录流 - 读目录
struct dirent *readdir(DIR *dirp);
功能:读目录 - 关闭目录
int closedir(DIR *dirp);
功能:关闭目录流
4、代码样例
int main(int argc, char const *argv[])
{
int fd;
int nbytes;
char buf[100] = "hello IO";
//如果参数小于规定个数,那么提示用法
if(argc < 2){
printf("%s <filename>\n", argv[0]);
return -1;
}
fd = open(argv[1], O_RDWR|O_CREAT, 0777);
if(fd < 0){
perror("open err");
return -1;
}else{
printf("open success\n");
}
//写入内容
nbytes = write(fd, buf, strlen(buf));
if(nbytes < 0){
perror("write err");
return -1;
}else{
printf("write success\n");
}
close(fd);
return 0;
}
来源:CSDN
作者:小cosy
链接:https://blog.csdn.net/weixin_41571307/article/details/104355333