Articles of 文件 io

读取和写入一个大文件,而不是一个小块的磁盘一次的缺点?

我主要在基于Windows和Windows CE的系统上工作,其中CreateFile , ReadFile和WriteFile是工作马,无论是在本地Win32域还是在托pipe的.Net域中。 到目前为止,我一直没有任何明显的问题写或读大块文件,而不是循环,直到处理几个较小的块。 我通常将IO工作委托给后台线程,在完成时通知我。 但是看看文件IO教程或“教科书示例”,我经常会发现“小块循环”,而没有解释为什么它被使用,而不是更明显(我敢说!)“一次完成”。 我有什么缺点,我没有明白? 澄清: 通过大文件,我比较了我的单块与多个块。 我提到的多个块的例子通常在Windows CE上有1024个字节的大小,在桌面上有10个大小。 我的大文件通常是二进制文件,如手机等相机的照片,大小顺序为2-10 MB。 换句话说,不接近1 GB。

如何在C / C ++中以编程方式读取Linux文件权限

我怎样才能以编程方式读取linux文件权限,而不是使用“ls”然后parsing结果。

如何停止我的Linux系统中的磁盘I / O的页面caching?

这里是我的系统基于Linux2.6.32.12: 1它包含20个占用大量usr cpu的进程2需要将数据以100M / s的速率写入磁盘,并且这些数据最近不会被使用。 我期望的是: 它可以稳定运行,磁盘I / O不会影响我的系统。 我的问题: 一开始,系统按我的想法运行。 但随着时间的推移,Linux会为磁盘I / Ocaching大量数据,导致物理内存减less。 最后,将没有足够的内存,那么Linux将交换进出我的进程。 这会导致很多CPU时间用于I / O的I / O问题。 我有什么尝试: 我试图通过“fsync”来解决这个问题,每次我写一个大块。但是物理内存在caching的同时还在递减。 如何停止页面caching在这里,对我来说是没用的 更多信息: 当Top显示免费46963m时,一切都很好,包括cpu%wa低,vmstat显示没有si左右。 当Top显示免费273m时,%wa是如此之高以至于影响我的进程,而vmstat显示了很多si等等。

ioread32后跟iowrite32没有给出相同的价值

我已经开始学习Linux设备驱动程序。 我正在做一些示例程序作为我学习的一部分。 为了理解内存映射IO,我写了下面的代码(这里只显示init)。 没有硬件映射在基地址。 static unsigned long base = 0xfed00000; unsigned long device_base=0; unsigned long virtual_base=0; static int __init sharedirqmodule_init(void) { u32 register1=0; u32 value=0x23456789; device_base=base; void *address=0; if(!request_mem_region(device_base,8,"device")) return -ENODEV; virtual_base = (unsigned long) ioremap(device_base, 8); address=(void *)virtual_base; printk(KERN_ERR "Sharedirq : Address value: %lx\n",address); iowrite32(value,address); wmb(); register1=(u32)ioread32(address); rmb(); printk(KERN_ERR "Shared irq :value: %d \n",register1); […]

一次性*级别* – 触发epoll():EPOLLONESHOT是否意味着EPOLLET?

是否可以在单触式水平触发模式下使用epoll ? search时找不到任何信息; 似乎每个人都使用边缘触发模式。

如何select开放模式与fopen()?

我有一个关于文件打开模式与fopen() 。 在我的情况下,我想自由地寻找光标,有时甚至可能超越EOF 。 更重要的是,我也想追加到它而不是截断现有的文件。 我试图以a+模式打开文件; 但是,我不能自由地寻找文件光标。 每次我寻找超出EOF的光标时,新的到达数据将追加到文件的末尾,而不是我指定的位置。 而如果以w+模式打开,现有文件将被截断。 有没有完美的解决这个问题? 更新: 没有明确规定的一点是,文件可能并不总是存在的; 在这种情况下,我必须创build一个新文件。 其实我想处理一个configuration文件。 我不知道这是否是好的做法。 或者我应该先放置一个空的configuration文件。 这样就没有必要在意文件不存在了吗? 以下是代码片段: FILE *f = fopen(FILE_PATH, "wb+"); struct record r; if (f) { if (fread((void *)&r, 1, sizeof(struct record), f) { /* File exists, do the normal flow */ } else { if (feof(f)) { /* File is newly […]

Java读生活日志文件

我正在用Java编写一个cod4服务器控制器(我知道那里有完美的服务器控制器,但我想从中学习)。 现在我想根据日志文件中的条目采取具体的操作,这个文件经常被鳕鱼更新,文件会变得很大。 现在我怎样才能有效地读取每一秒左右文件已经改变的部分呢? 或者是否有办法将日志文件中的所有内容都发送给Java?(我读了一些关于pipe道的内容)。 服务器在Linux上运行。 日志文件不需要保存在同一个位置,因为所有的东西都应该通过Java来保存。 大约一秒或2秒的延迟是可以接受的,但不再是。

为什么dd与“直接”(O_DIRECT)标志显着更快?

我有一个带有24个驱动器(两组12个)的RAID50configuration的服务器,如果我运行: dd if=/dev/zero of=ddfile2 bs=1M count=1953 oflag=direct 我得到: 2047868928 bytes (2.0 GB) copied, 0.805075 s, 2.5 GB/s 但是,如果我运行: dd if=/dev/zero of=ddfile2 bs=1M count=1953 我得到: 2047868928 bytes (2.0 GB) copied, 2.53489 s, 808 MB/s 我知道O_DIRECT导致页面caching被绕过。 但据我所知,绕过页面caching基本上意味着避免一个memcpy。 使用带宽工具在我的桌面上进行testing我有一个最坏的情况,连续内存写入带宽为14GB / s,我想象在更新的更昂贵的服务器上,带宽必须更好。 那么为什么一个额外的memcpy导致> 2倍的放缓呢? 使用页面caching的时候真的有更多的参与吗? 这是非典型的吗?

从持续更新的文件中读取

我正在编写一些C代码来处理文件中的一些数据,但我刚刚知道文件将不断添加到(大约1次/秒,也许更快)。 所以我想知道如何继续阅读文件,因为它被添加到。 然后,当我到最后,等到下一行被添加,然后处理它。 然后再等待,然后处理,依此类推。 我有这样的东西: while(1){ fgets(line, sizeof(line), file); while(line == NULL){ //wait ? then try to read again? } //tokenize line and do my stuff here } 我以为我可以用inotify,但是我没有办法。 有人有build议吗?

在Ubuntu LInux中使用C APIlocking和解锁文件

如何在Ubuntu Linux中使用C语言locking文件达指定的时间段(10秒)?