嵌入式开发学习历程(六)——Linux IO编程

整个嵌入式开发领域可以分为应用层、内核层与硬件层。

在之前的学习中,我们学习了C编程语言以及Linux命令。这些知识属于应用层的范围中,在掌握这些知识以后,需要更加深入的学习Linux高级编程。所谓Linux系统编程可以理解为系统内核层向应用层提供的接口,包括IO、进程通信、线程调度、网络等方面,掌握这些知识对于Linux应用开发,有着极大帮助。也为驱动程序的学习打下基础

Linux内核有以下功能:文件管理、进程管理、设备管理、内存管理、网络管理。

Linux下高级编程的特点:涉及到内核向用户空间提供的接口(函数)
内核提供接口的原则是:

  1. 应用服务需要调用基本函数代码来为自己服务,应用程序如果没有内核服务,则应用程序功能单一。
  2. 内核是稳定的代码集,同时要为多个用户空间。为了防止用户空间的某些用户使用内核代码崩溃从而不能为其他用户服务。

所以内核需要向用户空间提供接口,但要在接口函数中添加一些保护,这样仅会为符合接口的应用提供服务,同时也保护了内核。

Linux高级编程下,主要任务就是掌握系统提供的接口(函数),接口的功能,参数,和返回值的应用。
在IO方面主要对1. 文件IO 2. 标准IO 3.目录IO进行学习。

文件IO

文件IO涉及哪些接口?

  1. 从内核读取数据或从文件中读取数据——read函数
  2. 写数据到内核或者写数据到文件中——write函数
  3. 在文件读写操作前,需要打开文件——open函数
  4. 读写操作结束后,需要关闭文件——close函数

open —打开或者创建一个文件
函数声明:

open(char *,flag,mode);

在fcntl.h文件中声明。函数的作用:创建或者打开某个文件,其有三个参数,
第一个参数char * 包含有文件名和路径。
第二个参数:flag 打开文件的方式。
第三个参数:mode 设置文件的权限。

flag内容有以下形式:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 创建一个文件
O_EXCL 测试文件是否存在,如果同名文件存在返回-1报错。
O_TRUNC 打开文件(删除已经存在的内容)
O_APPEND 追加方式打开文件(不会删除已有内容)

返回值:
成功:文件描述符。它是一个非负整数,即文件的ID号,相当于人的身份证号。用于区分存储的文件。
出错:-1。
ID号的规律为:程序执行时,内核会自动打开3个文件描述符“0,1,2”,分别对应“标准输入,标准输出,出错”,此后进程每打开一个文件,文件描述符值从3开始累加。

文件IO操作示例

int main(int argc,char *argv[])
{
	int fd;
	fd = open(argv[1],O_CREAT,0777);
	if(fd < 0)
	{
		printf("creat file %s failure\n",argv[1]);
		return -1;
	}
	printf("creat file %s sucess,fd=%d\n",argv[1],fd);
	close(fd);
	return 0;
}

注意——open函数创建文件时的权限: == mode &(~umask)
umask(掩码)值在终端用umask命令可以查看 umask xxx修改

write 函数

write(inf fd,void *buf,size_t count)

第一个参数:向哪一个文件中去写
第二个参数:写入什么内容
第三个参数:向这个文件写多少个内容。
函数的返回值:实际写入的字节数。

read函数

read(int fd,void *buf,size_t count)

第一个参数:从哪一个文件中去读
第二个参数:读到什么地方去
第三个参数:第三个参数:读多少个。
函数的返回值:实际读出的字节数。

lseek函数

lseek(int fd,off_t offset,int whence)//包含在头文件:sys/tyoes.h unistd.h中

他的功能:调整读写的位置指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值