我想你想要的可能是什么
int fsync(int fd);
要么
int fdatasync(int fd);
fsync
将文件从内核缓冲区刷新到磁盘.fdatasync
除了元数据之外,它也会做.
我想你想要的可能是什么
int fsync(int fd);
要么
int fdatasync(int fd);
fsync
将文件从内核缓冲区刷新到磁盘.fdatasync
除了元数据之外,它也会做.
你有两个选择:
使用fileno()
以获得与相关的文件描述符stdio
流指针
完全不要使用
,这样你也不必担心刷新 - 所有写入都会立即进入设备,对于字符设备,write()
在下级IO完成之前,调用甚至不会返回(在理论).
对于设备级IO,我会说使用起来很不寻常stdio
.我强烈建议使用较低级别open()
,read()
并且write()
代替(根据你以后的回复)功能:
int fd = open("/dev/i2c", O_RDWR); ioctl(fd, IOCTL_COMMAND, args); write(fd, buf, length);
fflush()
仅刷新由stdio fopen()
层添加的缓冲,由FILE *
对象管理.如内核所见,底层文件本身不会在此级别进行缓冲.这意味着绕过该FILE *
层的写入,使用fileno()
和raw write()
,也不会以fflush()
刷新的方式进行缓冲.
正如其他人所指出的那样,尽量不要混淆两者.如果您需要使用"原始"I/O功能ioctl()
,那么open()
直接使用文件,而不使用fopen<()
stdio中的朋友.