嵌入式Linux应用编程-文件IO

十年热恋 提交于 2020-02-18 15:24:22

近期学习了下嵌入式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、接口

  1. 打开文件
    int open(const char *pathname, int flags);
    功能:打开一个文件,并且返回一个文件描述符供后续读写类接口使用。
  2. 读文件
    ssize_t read(int fd, void *buf, size_t count);
    功能:从文件描述符为fd的文件/设备读取最大count个字节的数据
  3. 写文件
    ssize_t write(int fd, const void *buf, size_t count);
    功能:从buf写入到fd文件中,最大写count个字节
  4. 文件定位
    off_t lseek(int fd, off_t offset, int whence);
    功能:实现文件的定位操作
  5. 获取文件信息
    int stat(const char *path, struct stat *buf);
    功能:获取文件信息
  6. 关闭文件
    int close(int fd);
    功能:关闭fd文件
  7. 创建目录
    int mkdir(const char *pathname, mode_t mode);
    功能:创建一个目录
  8. 打开目录
    DIR *opendir(const char *name);
    功能:获得目录流
  9. 读目录
    struct dirent *readdir(DIR *dirp);
    功能:读目录
  10. 关闭目录
    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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!