本帖最后由 ntwuhui 于 2014-3-22 17:10 编辑 知识准备:
由于通过使用文件进行通信,必然需要用到文件的读写操作,翻阅相关资料得知基于ARM的EV3固件采用
POSIX(Portable Operating System Interface,可移植操作系统接口),通过度娘找到如下资料。
POSIX 文件操作,其中关于文件读写操作如下:
1、打开文件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: 以可读写方式打开文件。
上述三种标志是互斥的,也就是不可同时使用,但可与下列标志利用OR(|)运算符组合。
O_CREAT: 若文件不存在则自动建立该文件。
O_TRUNC: 若文件存在并且以可写的方式打开时,此标志会令文件长度清为0,而原来存于该文件的资料也会消失。
O_APPEND:当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
mode:在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件权限应该为(mode-umaks)。
S_IRWXU00700 权限:代表该文件所有者具有可读、可写及可执行的权限。
S_IRUSR 或S_IREAD,00400权限:代表该文件所有者具有可读取的权限。
S_IWUSR 或S_IWRITE,00200 权限:代表该文件所有者具有可写入的权限。
S_IXUSR 或S_IEXEC,00100 权限:代表该文件所有者具有可执行的权限。
返回值: 若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。
2、建立文件Create
表头文件:
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<fcntl.h>
复制代码函数定义:
- int creat(const char * pathname, mode_tmode);
复制代码函数说明:参数pathname指向欲建立的文件路径字符串。关于参数mode请参考open()函数。Creat()相当于使用下列的调用方式调用open()
- open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
复制代码3、关闭文件close
表头文件:
函数定义:
函数说明:当使用完文件后若已不再需要则可使用close()关闭该文件,close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。
返回值:若文件顺利关闭则返回0,发生错误时返回-1。
4、读文件read
表头文件:
函数定义:
- ssize_t read(int fd,void * buf ,size_t count);
复制代码函数说明:
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
返回值:如果顺利,read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。
5、写文件write
表头文件:
函数定义:
- ssize_t write (int fd,const void * buf,size_t count);
复制代码函数说明:
write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。
返回值: 如果顺利,write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。