【嵌入式Linux C编程】linux文件编程

2019-07-12 14:17发布

系统调用是操作系统提供给用户的一组“特殊”接口,用户程序可以通过这些接口来获得内核提供的服务。用户程序为什么不可以直接调用内核?系统调用可以保护内核。用户程序在用户空间中操作用户数据,不允许访问内核空间数据,也无法调用内核函数。用户编程接口API在用户空间中,连接了用户空间的系统命令和内核空间的系统调用
Linux文件可分为:普通文件,目录文件,链接文件,设备文件。不带缓存的I/O操作open函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。
#include #include #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname是要打开或者创建的文件名;flag是打开或创建文件的方式;mode参数只在创建时需要。open函数运行成功,返回新分配的文件描述符;失败则返回-1并设置error。打开方式有: O_RDONLY   只读打开 O_WRONLY   只写打开 O_RDWR     读、写打开(一般使用这种方式)int fd;//定义一个变量表示文件描述符 fd = open("hello.txt", O_RDWR | O_CREAT, S_IRWXU);//以可读写方式创建一个名为“hello.txt”的文件,文件创建者具有RWX(可写可读可执行)权限。write函数
int write(int fd, const void * buf, size_t length)//把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数read函数int read(int fd, const void *buf, size_t length);//从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数lseek函数int lseek(int fd, offset_t offset, int whence);//将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置whence参数有三个选项:SEEK_SET 初始位置在头部; SEEK_CUR 初始位置在当前位置; SEEK_END 初始位置在文件末尾offset可以取负值,表示向前移动。带缓存的I/O流操作(库函数)三种缓存模式:全缓存; 行缓存; 无缓存。fopen函数FILE *fopen(const char *filename, const char *mode) filename:打开的文件名(包含路径,缺省为当前路径) ;mode : 打开模式;mode有:r——只读方式打开,文件必须已存在;w——只写方式打开,文件不存在则创建;若已存在,则清空重写;a——只能在文件末尾追加数据,文件不存在则创建;r+——读写方式打开,文件必须已存在;w+——读写方式打开,文件不存在则创建;若已存在,则清空重写;a+——读和追加方式打开,文件不存在则创建。fclose函数int fclose(FILE * stream);用来关闭之前fopen打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。fread函数size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)ptr为读入数据的存放地址(读取到这里);size表示一次读取多少个字节数; nmemb表示一共要读取多少个size字节数的数据;stream是被读取的已打开的文件指针(从该文件中读)。其返回值是读取到的字节数。fwrite函数size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream)ptr为欲写入数据的地址(数据来源);size表示一次写入多少字节数;nmemb表示一共要写入多少个size字节数的数据;stream表示被打开的文件指针(写向该文件)。其返回值是写入的字节数。