- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我认为 fsync()
在内部执行 fflush()
,所以在流上使用 fsync()
是可以的。但是在网络 I/O 下执行时我得到了意想不到的结果。
我的代码片段:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* get fd of the FILE pointer */
fd = fileno(fp);
#ifndef WIN32
ret = fsync(fd);
#else
ret = _commit(fd);
fclose(fp);
但似乎 _commit()
没有刷新数据(我在 Windows 上试过,数据写在 Linux 导出的文件系统上)。
当我将代码更改为:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);
它刷新数据。
我想知道 _commit()
是否与 fflush()
做同样的事情。有什么意见吗?
最佳答案
fflush()
适用于 FILE*
,它只是将应用程序的 FILE*
中的内部缓冲区刷新到操作系统。
fsync
在较低级别工作,它告诉操作系统将其缓冲区刷新到物理媒体。
操作系统大量缓存您写入文件的数据。如果操作系统强制每次写入都命中驱动器,那么事情将非常缓慢。 fsync
(除其他事项外)允许您控制数据何时到达驱动器。
此外,fsync/commit 作用于文件描述符。它不知道 FILE*
并且无法刷新其缓冲区。 FILE*
存在于您的应用程序中,文件描述符通常存在于操作系统内核中。
关于fflush - fflush 和 fsync 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340610/
我认为 fsync() 在内部执行 fflush(),所以在流上使用 fsync() 是可以的。但是在网络 I/O 下执行时我得到了意想不到的结果。 我的代码片段: FILE* fp = fopen(
我有一个实现多线程网络代理的基本草图: FILE *proxy_log_file; static void SIGUSR1_handler(int sig) { (void)sig;
我遇到了 this page这说明了创建悬挂点的常见方式。 下面的代码通过返回局部变量的地址来说明悬空指针: // The pointer pointing to local variable bec
所以我写了一个测试程序,这是代码 #include #include int main(void) { int i; printf("%s", "entering\n");
有来自 cplusplus.com site 的简单代码 #include char mybuffer[80]; int main() { FILE *pFile; pFile =
我正在尝试使用以下代码将 2D 表格打印到我的终端: #include #include #include #include #include #include char getch()
我正在用 C 语言创建一个非常简单的程序执行计时器。我将在下面提供示例代码。问题是 fflush(NULL) 在以 Ctrl+C(即 SIGINT 信号)。它们有时仍会在 Estimated runn
我正在尝试用 C 语言制作一个时钟,但是屏幕没有正确清除,它只是不断地打印到一个新行。我如何不正确地使用 fflush? #include #include #include int main(
这个问题在这里已经有了答案: Using fflush(stdin) (7 个答案) How can one flush input stream in C? (8 个答案) 关闭 4 年前。 我似
我有这段代码:当第一个 child 向第二个 child 发送数据时,程序卡住了,第二个 child 做 fscanf 然后卡住了,因为他无法阅读我找不到它的原因。请帮助我找出如何确保 fflush
我很抱歉这个愚蠢的问题。我有 C 程序提示用户输入年龄和姓名然后将年龄和姓名打印到屏幕上。这是我从书上读到的练习。 这个程序: #include int main (void) { int a
我不确定我是否正确理解了 C 中刷新的工作原理。我就是无法按照多本手册和引用书中的描述让它工作。这是一个带有注释的示例: #include int main(void) { int x;
来自 std::fflush 文档(http://en.cppreference.com/w/cpp/io/c/fflush): Causes the output file stream to be
为什么 fflush(..) 对 c2 和 c0 不起作用? 如果我使用声明 c0 = 0 和 c2 = 0 它有效,但 fflush(stdin) 无效,我试着把在不同的地方但它没有用,我在 ubu
#include int main() { int test_no ,count=1,i,n,j; scanf("%d",&test_no); ffl
我开始编程并了解了以下命令fflush(stdout);。我明白为什么大多数平台都需要它,但我仍然问自己一些问题...... 1. \n 不是应该在 msys2 上缓冲吗,因为它是行缓冲的? (薄荷)
我似乎无法弄清楚这段代码有什么问题: #include #include #include #include #define MAX 100 #define TRUE 1 #define FA
#include int main() { int test_no ,count=1,i,n,j; scanf("%d",&test_no); ffl
我有以下代码, fflush(stdin); print("Enter y/n"); scanf("%c",&a); 这里,它在给出输入之前退出。看起来问题是因为它没有刷新可能包含一些垃圾字符的输入缓
因此,在 Google 上快速搜索用于清除输入缓冲区的 fflush(stdin) 会发现许多网站警告不要使用它。然而,这正是我的计算机科学教授教授全类的方式。 使用 fflush(stdin) 有多
我是一名优秀的程序员,十分优秀!