首页 理论教育 Contiki物联网系统-文件使用

Contiki物联网系统-文件使用

时间:2023-11-20 理论教育 版权反馈
【摘要】:用唯一的文件描述符表示每个打开的文件,文件描述符是int类型的并且作为参数提供给所有处理文件的CFS 函数。调用cfs_open()函数可打开文件,该函数以文件名和一组标记作为参数,可能的标记为CFS_READ、CFS_WRITE 和CFS_APPEND,使用逻辑运算符OR 可以设置复合标记。如果不再需要打开的文件,应用程序应调用函数cfs_close()将其关闭。打开文件并得到该文件的文件描述符后,可以根据文件打开函数cfs_open()中指定的标记来使用文件。图6-1生成并读写文件

Contiki物联网系统-文件使用

用唯一的文件描述符表示每个打开的文件,文件描述符是int类型的并且作为参数提供给所有处理文件的CFS 函数。调用cfs_open()函数可打开文件,该函数以文件名和一组标记(flags)作为参数,可能的标记为CFS_READ、CFS_WRITE 和CFS_APPEND,使用逻辑运算符OR 可以设置复合标记。CFS_READ 标记是指为了读而打开文件,而CFS_WRITE 是指为了写而打开文件,根据是否设置了CFS_APPEND 标记CFS_WRITE 标记可能导致不同的操作。如果设置了CFS_WRITE 标记而没有设置CFS_APPEND 标记,该文件被截断为0,也就是建立新的文件。如果既设置了CFS_WRITE 标记也设置了CFS_APPEND 标记,则保留当前文件,并且文件指针将会立即指向文件末尾。设置CFS_APPEND 标记意味着自动设置CFS_WRITE 标记。如果不能打开文件,函数cfs_open()返回-1。如果能够打开文件,函数cfs_open()返回0 或大于0的值。如果不再需要打开的文件,应用程序应调用函数cfs_close()将其关闭。通过关闭打开的文件,文件系统将会释放该文件所占用的资源,并且把缓存数据保存到永久存储空间。

文件系统CFS-POSIX 和Coffee 中,调用函数cfs_remove()可删除文件,该函数用文件名作为参数。如果文件删除成功,函数cfs_remove()返回0,如果无法删除文件或文件不存在,函数cfs_remove()返回-1。

打开文件并得到该文件的文件描述符后,可以根据文件打开函数cfs_open()中指定的标记来使用文件。函数csf_read()用从文件中当前位置开始的最长len个字节填充缓存buf,“当前位置”存储在文件描述符中。函数csf_read()的返回值为读取的字节数,如果读取错误,将返回-1。函数cfs_write()用来将内存缓冲区buf 中的len 字节写入文件中,写文件的开始位置是文件描述符中指定的位置,该文件必须以设置CFS_WRITE标记方式打开。函数cfs_write()返回值为写入文件字节数,如果写文件错误,返回-1。要注意的是,函数cfs_read()和函数cfs_write()对写或读取一次调用中请求的字节数不做保证。

函数cfs_seek()把文件指针从当前文件位置移动到由参数offset和whence确定的位置,宏CFS_SEEK_SET 告诉函数cfs_seek()计算从文件开始位置的偏移量,例如绝对偏移量。宏CFS_SEEK_CUR 指定应该计算的与文件位置的当前位置相关的偏移值,类似地,宏CFS_SEEK_END 指定应该计算的与文件位置的末尾位置相关的偏移值,并且如果系统实现允许,可以将文件指针移动到文件末尾之外。如果程序希望把文件指针从参数whence指定的位置向后移动,CFS_SEEK_CUR 和CFS_SEEK_END 两种方法都接收负偏移值。如果移动文件指针成功,函数cfs_seek()返回新的绝对文件位置,如果文件指针不能移动到请求的位置,该函数返回-1。要注意的是,可以以CFS_SEEK_END 作为参数whence 的值,以0 作为参数offset 的值,可通过调用函数cfs_seek()检索文件的长度,该函数的返回值是文件长度,如果调用失败或不支持该操作,返回-1。函数cfs_read()不会返回与位置相关的正值。

下面例子说明CFS的使用,该例子说明怎样生成一个名为“text.txt”的新文件,然后将文件指针移动到文件开始位置并写文件和读取写入数据。即向文件写信息,找到开始位置读取写入信息。为了简单起见,暂时忽略错误检查,运行结果如图6-1所示。(www.xing528.com)

图6-1 生成并读写文件

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈