打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【新提醒】EV3G与原生C++程序通信实验贴
 本帖最后由 ntwuhui 于 2014-3-22 17:10 编辑

知识准备:
       由于通过使用文件进行通信,必然需要用到文件的读写操作,翻阅相关资料得知基于ARM的EV3固件采用POSIX(Portable Operating System Interface,可移植操作系统接口),通过度娘找到如下资料。POSIX 文件操作,其中关于文件读写操作如下:
1、打开文件Open
表头文件:
  1. #include<sys/types.h>
  2. #include<sys/stat.h>
  3. #include<fcntl.h>
复制代码
函数定义:
  1.       int open( const char * pathname, int flags);
  2.       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
表头文件:
  1. #include<sys/types.h>
  2. #include<sys/stat.h>
  3. #include<fcntl.h>
复制代码
函数定义:
  1. int creat(const char * pathname, mode_tmode);
复制代码
函数说明:参数pathname指向欲建立的文件路径字符串。关于参数mode请参考open()函数。Creat()相当于使用下列的调用方式调用open()
  1. open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
复制代码

3、关闭文件close
表头文件:
  1. #include<unistd.h>
复制代码
函数定义:      
  1. int close(int fd);
复制代码
函数说明:当使用完文件后若已不再需要则可使用close()关闭该文件,close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。
返回值:若文件顺利关闭则返回0,发生错误时返回-1。   
4、读文件read
表头文件:
  1. #include<unistd.h>
复制代码
函数定义:
  1. 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
表头文件:
  1. #include<unistd.h>
复制代码
函数定义:
  1. ssize_t write (int fd,const void * buf,size_t count);
复制代码
函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。
返回值: 如果顺利,write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言文件操作函数大全(超详细)
VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
fcntl.h与unistd.h
理解feof与EOF
lseek()函数的使用说明
C++ 文件操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服