Articles of 文件 io

如何阻止读取系统调用

我不明白如何读取()系统块。 我创build了一个空文件并尝试使用read()系统调用进行读取。 它返回0。 fd = open("Demo.txt",O_RDONLY); n = read(fd,&ch,10); // returns 0 由于文件中没有数据,我期待read()无限期地被阻塞。 read()是否将EOF视为有效数据并立即返回? 我的理解是正确的吗?

Java中的文件path(Linux)

我已经创build了一个Java应用程序,从一个位于src/文件夹中的文件conf.properties中加载一些configuration。 当我在Windows上运行这个应用程序,它完美的作品。 但是,当我尝试在Linux上运行它时,会引发这个错误: java.io.FileNotFoundException: src/conf.properties (No such file or directory)

可以使用fopen来打开URL

是fopen("tftp://1.1.1.1/file.txt","rb"); 一个有效的陈述? 在C编程中可以使用fopenurl吗?

Python的select()行为很奇怪

我在理解select.select的行为时遇到了一些麻烦。 请考虑下面的Python程序: def str_to_hex(s): def dig(n): if n > 9: return chr(65-10+n) else: return chr(48+n) r = '' while len(s) > 0: c = s[0] s = s[1:] a = ord(c) / 16 b = ord(c) % 16 r = r + dig(a) + dig(b) return r while True: ans,_,_ = select.select([sys.stdin],[],[]) print ans s […]

截断内存映射文件

我正在使用内存映射IO的索引文件,但问题是,我不能resize为空的文件。 某处之前: MappedByteBuffer map = raf.getChannel().map(MapMode.READ_WRITE, 0, 1 << 30); raf.close(); // use map map.force(); map = null; 调整: for (int c = 0; c < 100; c++) { RandomAccessFile raf = new RandomAccessFile(indexFile, "rw"); try { raf.setLength(newLen); if (c > 0) LOG.warn("used " + c + " iterations to close mapped byte buffer"); return; […]

创build未刷新的文件输出缓冲区

我正在尝试清除在Linux上运行的几种程序中使用不同语言的未刷新文件I / O缓冲区时出现的问题。 冲洗缓冲区的解决scheme是很容易的,但这个无刷新缓冲区的问题发生得非常随机。 我不想就可能导致的原因寻求帮助,而是关心如何创造(复制)和诊断这种情况。 这导致了一个由两部分组成的问题: 人为地和容易地构build一个例子,在给定的时间内,可以有已知的输出缓冲区不被刷新的情况是否可行? 我的search是空的。 一个微不足道的基准就是在尝试从另一个进程写入大量数据的同时,在一个进程中锤击硬盘(例如交换)。 虽然这个“有效”,但它使系统实际上无法使用:我不能戳,看看发生了什么事。 Linux内部是否有可以识别给定进程已经清除文件输出缓冲区的命令? 这是可以在命令行运行的东西,还是有必要直接查询内核? 我一直在看fsync , sync , ioctl , flush , bdflush等等。 但是,缺乏创build未刷新缓冲区的方法,目前还不清楚这些可能会显示什么。 为了复制他人,C中的#1例子将是非常好的,但问题是真正的语言不可知论 – 只要知道创build这种情况的方法将有助于我正在工作的其他语言。 更新1:我对任何混淆道歉。 正如有几个人指出的,缓冲区可以在内核空间或用户空间中。 这有助于查明问题:我们正在创build大的脏内核缓冲区。 这个区别和答案完全解决了#1:现在似乎很清楚如何在用户空间或内核空间中重新创build未刷新的缓冲区。 但是,识别哪个进程ID具有脏内核缓冲区还不清楚。

通过一个进程计算总磁盘I / O

我正在寻找一个工具,它将在一个进程结束后,通过一个进程转储总的磁盘I / O。 到目前为止,我的发现是: iotop =它实时显示每个进程的I / O,但不会在进程结束后给出总计。 iostat =它显示实时I / O,但不告诉过程 例如 ,我有一些使用PID ####在后台运行的进程。 在stream程结束后,我需要总共写入和读取该进程的总字节数。任何人都可以告诉我如何在给定进程PID的情况下提取这些信息。

fread / ftell显然在Windows下坏了,在Linux下工作正常

所以这里是这个问题,我正在阅读我的游戏关卡文件,在linux下工作正常: @0 @12 200×200 version 3 @16 973 blocks @989 @993 18 zones 但在Windows下,我得到以下结果: @0 @212 200×200 version 3 @216 973 blocks @1200 @1204 18 zones 呃? 窗口ftell统计偏移量为200? 读取文件显然会产生相同的数据,但fread使用(?)ftell的值来确定文件中可以读取的字节数。 所以当然,我在阅读文件结尾时遇到了一些问题: @1425 zone#9 2×3 @ 66/9 @1425 zone#10 2×3 @ 66/9 @1425 zone#11 2×3 @ 66/9 @1425 zone#12 2×3 @ 66/9 @1425 zone#13 2×3 @ 66/9 […]

LinuxasynchronousIO的状态?

我在这里问,因为谷歌search导致你在一个快乐的旅行周围的档案,而不是暗示目前的状态是什么。 如果你经过谷歌,看起来asynchronousIO在2001年到2003年是风靡一时的,而到了2006年,一些像epoll和libaio这样的东西也出现了。 kevent出现了,但似乎已经消失了,而且据我所知,仍然没有好的方法来混合基于完成的和基于就绪的信号,asynchronous发送文件 – 甚至可能吗? – 以及单线程事件循环中的所有其他内容。 所以请告诉我,我错了,这一切都是美好的! – 重要的是,使用什么API。 Linux在这方面如何与FreeBSD和其他操作系统比较?

从Python中的文件读取行,而不会在结尾处追加“\ n”

我的文件是“xml.txt”,内容如下: books.xml news.xml mix.xml 如果我使用readline()函数,则会在所有文件的名称处附加“\ n”,这是因为我想打开xml.txt中包含的文件。 我写了这个: fo = open("xml.tx","r") for i in range(count.__len__()): #here count is one of may arrays that i'm using file = fo.readline() find_root(file) # here find_root is my own created function not displayed here 运行此代码时遇到错误: IOError:[Errno 2]没有这样的文件或目录:'books.xml \ n'