在 Linux 系统中,fflush()
函数用于刷新输出流(如文件或管道)的缓冲区
- 使用
fsync()
函数:
fsync()
函数可以确保文件描述符关联的文件数据和元数据被刷新到磁盘。这对于需要确保数据完整性的场景非常有用。请注意,fsync()
仅适用于文件描述符,而不是文件指针。因此,您需要使用 fileno()
函数从文件指针获取文件描述符。
示例:
#include#include int main() { FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("fopen"); return 1; } fprintf(file, "Hello, World!\n"); int fd = fileno(file); if (fd == -1) { perror("fileno"); return 1; } if (fsync(fd) == -1) { perror("fsync"); return 1; } fclose(file); return 0; }
- 使用
_POSIX_SYNCHRONIZED_IO
选项:
如果您的系统支持 POSIX 同步 I/O,您可以在打开文件时设置 _POSIX_SYNCHRONIZED_IO
选项。这将导致所有对该文件的写操作都立即刷新到磁盘。
示例:
#include#include #include int main() { int fd = open("example.txt", O_WRONLY | O_CREAT | O_SYNC, 0644); if (fd == -1) { perror("open"); return 1; } const char *message = "Hello, World!\n"; ssize_t written = write(fd, message, strlen(message)); if (written == -1) { perror("write"); return 1; } close(fd); return 0; }
请注意,这些替代方案可能会影响程序的性能,因为它们会立即将数据刷新到磁盘。在选择替代方案时,请根据您的需求进行权衡。