write()函数

相关函数:open, read, fcntl, close, lseek, sync, fsync, fwrite

头文件:#include <unistd.h>

定义函数:ssize_t write (int fd, const void * buf, size_t count);

函数说明:write()会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内. 当然, 文件读写位置也会随之移动.

返回值:如果顺利write()会返回实际写入的字节数. 当有错误发生时则返回-1, 错误代码存入errno 中.

错误代码:
EINTR 此调用被信号所中断.
EAGAIN 当使用不可阻断I/O 时 (O_NONBLOCK), 若无数据可读取则返回此值.
EADF 参数fd 非有效的文件描述词, 或该文件已关闭.


范例 请参考open().


1.Write函数

     用法: 
#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

参数:  
fd:要进行写操作的文件描述词。
buf:需要输出的缓冲区
count:最大输出字节计数

使用时候偶然发现,如果设置打开fb=open("/dev/fb0",O_RDONLY)之类的缓存文件,并且再打开fb_tupian=open("tu.bin",O_RDONLY);并且将fb_tupian使用read(fb_tupian,buf,size);读取之后,这个buf存放的就是tu.bin的数据

好了,问题出现了,当使用write(fb,buf,size)写第一张图片的时候还是正确的,但是当打开例如:tu001.bin的buf001,发现,不能写入framebuffer的fb文件描述符下,因为由于前面写的tu.bin的数据已经导致缓存地址溢出,因此,后面的图片再次使用write函数写入到fb的时候,fb缓存的地址没有清到缓存的首地址,因此溢出了LCD屏幕范围。

解决的方法是:需要将该文件close掉,再次打开,才能进行重写。

2.fread函数和fwrite函数

1.函数功能

  用来读写一个数据块。

2.一般调用形式

  fread(buffer,size,count,fp);

  fwrite(buffer,size,count,fp);

3.说明

  (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

  (2)size:要读写的字节数;

  (3)count:要进行读写多少个size字节的数据项;

  (4)fp:文件型指针。


你可能感兴趣的:(write()函数)