Linux下一切皆文件(lcd、触摸屏、usb等)
open函数:创建和打开文件
//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
//参数解释
pathname:文件的路径
flags:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:如果没有该文件,创建该文件
O_TRUNC:如果文件存在,删除原有信息
O_APPEND:文件已经存在,以追加的形式打开文件
mode:如果文件被新建,指定其权限为mode(以八进制书写,如:0777)
//函数返回值
成功:文件描述符
失败:-1
//文件描述符
当 open 成功打开或创建一个文件时,就用一个非负整数表示这个文件,这个非负整数就是文件描述符,范围:0~1023,其中 0,1,2 已经被程序占用(默认被打开)
示例代码:
//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
//可读可写形式打开文件
int fd1 = open("./1.c",O_RDWR);
if(lcd_fd < 0)//出错处理
{
perror("open file failed");//打印出错信息
return -1;
}
printf("文件描述符fd1:%d\n", fd1);
printf("文件打开成功\n");
//以可读可写形式打开文件,如果没有该文件则创建该文件
int fd2=open("./2.c",O_RDWR|O_CREAT,0777);
if (fd2<0)//
{
perror("open file failed");//打印出错信息
return -1;
}
printf("文件描述符fd2:%d\n", fd2);
printf("文件打开成功\n");
}
close函数:关闭文件
//头文件
#include <unistd.h>
//函数原型
int close(int fd);
//参数
fd:文件描述符
示例代码:
//头文件
#include <unistd.h>
close(fd1);
close(fd2);
read/write函数:读取/写入文件
//头文件
#include <unistd.h>
//函数原型
//读取函数
ssize_t read(int fd, void *buf, size_t count);
//参数
fd:文件描述符
buf:将从文件读取的数据放在 buf 缓冲区
count:想要读取的字节数,未知数
//返回值
成功:实际读出的字节数
失败:-1
//写入函数
ssize_t write(int fd, const void *buf, size_t count);
//参数
fd:文件描述符
buf:将要写入的数据放在 buf 缓冲区
count:想要写入的字节数,已知数
//返回值
成功:实际写入的字节数
失败:-1
示例代码:
//新建1.txt,1.txt中存放一些字符串
//从 1.txt 中读取数据
int fd1=open("./1.txt",O_RDWR,0777);
char buf[100]={0};
read(fd1,buf,sizeof(buf));
printf("buf = %s\n",buf);
//往 2.txt 中写入数据
int fd2=open("./2.txt",O_RDWR | O_CREAT,0777);
char msg[100] = "hello world";
write(fd2,msg,strlen(msg));
close(fd2);
close(fd1);
lseek函数:使光标进行偏移
//头文件
#include <sys/types.h>
#include <unistd.h>
//函数原型
off_t lseek(int fd, off_t offset,int whence);
//参数
offset:偏移量,可以为负数,表示往前偏移
whence:基准点
SEEK_SET:文件开头处
SEEK_CUR:当前位置
SEEK_END:文件末尾
//返回值
成功:新的文件位置的偏移量
失败:-1
示例代码:
#include <sys/types.h>
#include <unistd.h>
lseek(fd1,0,SEEK_SET);
lseek(fd1,-1,SEEK_END);
int file_size=lseek(fd1,0,SEEK_END);