c语言系统IO
市面上的设备基本都是通过IO控制设备文件,然后驱动监听文件变换从而控制外设。同时不同的系统IO接口也可能会有所不同,但大致都相同,本文介绍的是Linux系统下的系统IO;
open()
简单打开文件:
int fd = open("./test.txt", O_RDWR);//读写方式打开
if (fd == -1)
{
perror("open");
}
else
{
printf("打开成功!\n");
}
O_CREAT一般和O_EXCL搭配使用,目的就是要创建一个新文件,防止如果文件存在覆盖原先的内容。
当需要多个产数时,采用的是多个参数做或运算如:
int fd = open("./test.txt", O_RDWR|O_CREAT);
其返回fd的值为0~1023但0、1、2一般是取不到的,这是系统默认的三个文件的标识符,分别为标准输入,标准输出,标准错误;
另外如果创建新的文件,最好加上后面mode这个参数,这是代表文件的权限。
权限分为三组:
rwx分别为写权限,写权限,运行权限;所以最大权限为777
read()
简单示例:
ssize_t read(int fd, void *buf, size_t count);
返回值:成功,读取的字节数;失败返回-1
头文件:<unistd.h>
参数:
fd :文件标识符
buf:接收读取的内容,一般为数组或指针;
count:想要读取字节数
默认读的位置为文件开头,想要读指定位置的数据可以用lseek函数调整;
读取数据时以实际内容为主,即便你想读取的数据远超文件实际内容也没关系。
一下是man宝典里对read函数的讲解。
write()
头文件:<unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
返回值:成功,写入的字节数;失败返回-1
参数:
fd:文件标识符
buf:写入的数据
count:写入的字节数
写入以传入的字节数count为主,如果count大于buf中的字节数,就会写入乱码。同样也是通过sleek 可以调整写入位置。