Linux系统的基本思路就是:一切都是文件,无论是里面存储的数据还是外接设备都是文件。
因此操作每一个设备都会有对应的文件描述符号,我们可以像操作文件一样操作它们,但注意与操作文件还是有区别的。
直接操作设备的函数:
_return int open(_in char* path, _in int flag);
_return int write(_in int fd, _in char* inputbuffer, _in bufferlen);
_return int read(_in int fd, _inout char* out, _in bufferlen);
打开设备、向设备中写数据、从设备中读数据。
设备的文件描述符是由系统自动分配的:
系统总线识别到设备--->获取设备信息--->匹配对应的设备驱动--->挂载设备。
如果你设备没挂载上,软件方面来讲绝大多数是驱动问题。
一般来讲write函数是非阻塞的,read函数是阻塞的。如果想将read变为非阻塞的,open打开设备时候要去添加O_NDELAY(或者O_NONBLOCK)。如果想将write变为阻塞,open打开设备时要加上O_SYNC(或者O_DSYNC)标志。
另外还有一个标志是操作设备时常用的就是O_NCTTY,这个标志的意义就是让不将终端设备的文件描述符当做终端设备来操作。
向设备写数据:
in device = open("/dev/tty0", O_DSYNC|O_WRONLY|O_NCTTY);
write(device, "fuck", 4);
从设备读数据:
char buffer[1024]=""; //初始化全置为空
in device = open("/dev/tty0", O_NDELAY|O_RDONLY|O_NCTTY);
read(device, buffer, 1024);
这些是数据处理的操作(读、写),还有两个常用到的用于获取设备信息的函数fcntl和ioctl,这个在下一片里面再讲。