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

系统调用是操作系统提供给用户的一组“特殊”接口,用户程序可以通过这些接口来获得内核提供的服务。

用户程序为什么不可以直接调用内核?系统调用可以保护内核

用户程序在用户空间中操作用户数据,不允许访问内核空间数据,也无法调用内核函数。

用户编程接口API在用户空间中,连接了用户空间的系统命令和内核空间的系统调用


Linux文件可分为:普通文件,目录文件,链接文件,设备文件。

不带缓存的I/O操作

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是要打开或者创建的文件名;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表示被打开的文件指针(写向该文件)。其返回值是写入的字节数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值