Articles of file io

Linux中无缓冲的I / O

我正在写很多很多的数据,这些数据在几个星期内不会被再次读取 – 因为我的程序在机器上运行的可用内存量(以“free”或“top”显示)非常快地下降,内存量应用程序使用不会增加 – 其他进程使用的内存量也不会增加。 这使我相信内存正在被文件系统caching消耗 – 因为我不打算长时间读这个数据,所以我希望绕过系统缓冲区,这样我的数据就直接写到磁盘上了。 我没有梦想改善性能或成为一个超级忍者,我的希望是给文件系统一个提示,我不会马上回来这个内存,所以不花时间优化这些情况。 在Windows上,我遇到了类似的问题,并使用FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH修复了这个问题 – 机器的内存没有被我的应用程序占用,而且机器通用性更好。 我希望能够复制我在Linux上看到的改进。 在Windows系统中,对于扇区大小的文件是有限制的,所以我很高兴这个限制了我测量的增益。 有没有类似的方式来做到这一点在Linux?

如何在Linux中跟踪每个文件的IO操作?

我需要跟踪read特定文件的系统调用,而我目前正在通过parsingstrace的输出来做到这一点。 由于read操作文件描述符,我必须跟踪fd和path之间的当前映射。 另外,必须监视seek以保持跟踪中当前位置的最新状态。 在Linux中有更好的方法来获得每个应用程序,每个文件path的IO跟踪吗?

用C中的零覆盖整个文件的最快方法是什么?

我需要做的是以最快的方式用零填充整个文件内容。 我知道一些像cp这样的linux命令实际上得到了什么是一次写入的最好的块大小信息,但我无法弄清楚使用这个块大小的信息是否足够有一个不错的性能,看起来像st_blksize stat()不给我那个块的大小。 谢谢 ! 评论的一些答案: 这需要在C中完成,而不是使用碎片等工具。 stat()的用法没有错误 st_blksize正在返回一个大于文件大小的块,不知道该如何处理。 使用truncate()/ ftruncate(),只有额外的空间填充零,我需要覆盖整个文件数据。 我正在考虑像这样的东西: fd = open("file.txt", O_WRONLY); // check for errors (…) while(TRUE) { ret = write(fd, buffer, sizeof(buffer)); if (ret == -1) break; } close(fd); 问题是如何定义“编程”的最佳缓冲区大小。

打开O_CREAT | 在Linux上的NFS的O_EXCL?

当在Linux 2.6内核和NFSv3中open("fname", O_CREAT|O_EXCL)有效? 目前的规范open(2)系统调用文档( http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html )说,一切都很好: – O_EXCL – … On NFS, O_EXCL is only supported when using NFSv3 or later on kernel 2.6 or later. In NFS environments where O_EXCL support is not provided, programs that rely on it for performing locking tasks will contain a race condition. Portable programs that want to perform […]

为什么fprintf不直接写入文件,除非使用fflush()?

我写了一个守护进程,在文件中写入一个值。 我所观察到的是,当我一直写在一个文件上,文件中没有任何可见的东西。 另一方面,如果我使用fflush()方法,则字符在文件中可见。 为什么fflush()有所作为?

Bash读/写文件描述符 – 寻找文件的开始

我试图在bash中使用读/写文件描述符,这样我就可以删除后面提到的文件描述符的文件,例如: F=$(mktemp) exec 3<> "$F" rm -f "$F" echo "Hello world" >&3 cat <&3 但是cat命令没有输出。 如果我使用单独的文件描述符进行读写,我可以达到我想要的效果: F=$(mktemp) exec 3> "$F" exec 4< "$F" rm -f "$F" echo "Hello world" >&3 cat <&4 打印Hello world 。 我怀疑当你从写入切换到读取时,bash不会自动寻找文件描述符的开始,下面的bash和python代码的组合证实了这一点: fdrw.sh exec 3<> tmp rm tmp echo "Hello world" >&3 exec python fdrw.py fdrw.py import os f = os.fdopen(3) […]

如何检查一个文件是否被另一个应用程序在C ++中打开?

我知道,在C ++中有is_open()函数,但我想要一个程序来检查一个文件是否还没有被另一个应用程序打开。 有没有办法使用标准库来做到这一点? 编辑 – 澄清在答复,这是一个Linux应用程序。

在C中读取/写入二进制文件

有没有人有一个可以写入二进制文件的代码的例子。 还有可以读取二进制文件并输出到屏幕的代码。 看例子,我可以写入文件确定但是,当我尝试从文件读取它不正确的输出。

如何在C ++中使用UTF-8编码的string写入Windows中的文件

我有一个string,可能或不可能有unicode字符,我试图写在Windows上的文件。 下面我已经发布了一些代码示例,我的问题是当我打开并读取窗口的值时,它们都被解释为UTF-16字符。 char* x = "Fool"; FILE* outFile = fopen( "Serialize.pef", "w+,ccs=UTF-8"); fwrite(x,strlen(x),1,outFile); fclose(outFile); char buffer[12]; buffer[11]=NULL; outFile = fopen( "Serialize.pef", "r,ccs=UTF-8"); fread(buffer,1,12,outFile); fclose(outFile); 这些字符也被解释为UTF-16,如果我在打字机等打开文件。我做错了什么?

Windows上python中的二进制和文本I / O之间的区别

我知道我应该使用"rb"而不是"r"来打开一个二进制文件,因为Windows对于二进制和非二进制文件的行为不同。 但是我不明白,如果我以错误的方式打开一个文件,为什么这个区别甚至是必要的。 其他操作系统似乎通过处理这两种文件相同的罚款。