[文件系统]一些问题
来源:互联网 发布:淘宝图片大小分辨率 编辑:程序博客网 时间:2024/05/17 23:41
1,如何读取一个超过4G大小的文件
在你的Makefile里面写上
CFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES
CXXFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES
其他的不用修改。这样就可以支持64位的偏移了
2,一个文件一般都是占用整数个块,为什么文件系统设计不让所有文件紧挨着存放,一个块里可以存放多个文件
答:如果一个块里可以存放多个文件,那么需要一部分数据来管理各个块内部的文件边界,这部门数据量也很大,因此基本抵消了所节省文件空间的好处。
3,sync fsync fdatasync fflush几个函数的区别
(1)sync 函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。 通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数。这就保证了定期冲洗内核的块缓冲区。命令sync(1)也调用sync函数。
(2)fsync 函数是系统提供的系统调用。只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。接受的时一个Int型的文件描述符。
(3)fdatasync 函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。
(4)fflush:标准I/O函数(如:fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync(先调用fflush后调用fsync,否则不起作用)。fflush接受一个参数FILE *。
(2)fsync 函数是系统提供的系统调用。只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。接受的时一个Int型的文件描述符。
(3)fdatasync 函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。
(4)fflush:标准I/O函数(如:fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync(先调用fflush后调用fsync,否则不起作用)。fflush接受一个参数FILE *。
4,/proc/sys/vm/dirty_ratio节点的作用
这个参数控制档系统的档系统写缓衝区的大小,单位是百分比,表示系统记忆体的百分比,表示当写缓衝使用到系统记忆体多少的时候,开始向磁片写出资料。增大之会使用更多系统记忆体用于磁片写缓衝,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是10。设1加速程式速度
5,sync()的问题
恢复出厂设置概率不开机,只有某一家flash有问题,恢复出厂设置前先unmount userdata分区,unmount的时候会调用kill_sb 释放掉super_block,而sync()函数的调用流程是sync()————》SYSCALL_DEFINE0(sync)————》sync_filesystems()————》sync_one_sb()————》__sync_filesystem() ,发现sync()会忽略掉未mount的block device。
恢复出厂设置概率不开机,只有某一家flash有问题,恢复出厂设置前先unmount userdata分区,unmount的时候会调用kill_sb 释放掉super_block,而sync()函数的调用流程是sync()————》SYSCALL_DEFINE0(sync)————》sync_filesystems()————》sync_one_sb()————》__sync_filesystem() ,发现sync()会忽略掉未mount的block device。
PC拷贝大文件到Mass storage容易出错,原因就是遇到比较慢的sdcard的时候sync花的时间比较长,而SCSI规定HOST最多等到30s。
6,linux内核中如何读写文件
点击打开链接
打开文件:filp_open()函数
strcut file* filp_open(const char* filename, int open_mode, int mode);读写文件:vfs_read()和vfs_write函数
ssize_t vfs_read(struct file* filp, char __user* buffer, size_t len, loff_t* pos);ssize_t vfs_write(struct file* filp, const char __user* buffer, size_t len, loff_t* pos);关闭文件:flip_close()
int filp_close(struct file*filp, fl_owner_t id);注意的是您在使用read_file & write_file 之前需要
//read set kernel domain set_fs(KERNEL_DS);在read_file & write_file 完成之后,需要
//need set user domain again set_fs(USER_DS);
7,linux删除文件的方式
当一个文件被多个进程占用的时候,当其中一个进程将文件删除,它只是将文件对应的dentry的counter减1,如果该进程发现还有其它进程占用文件,则则只在vfs_unlink() 的 d_delete() 已经将 dentry 从哈希链上移除,但是并不会释放掉当前dentry和对应的inode,所以最终会造成的结果是:已经open过当前文件的process仍然可以继续正常使用该文件,包括读写数据。只有当最后一个进程关闭打开该文件的描述符的时候,该文件对应的inode才会真正被删除。
8,mkbootfs mkbootimg mkimage工具的使用
mkbootfs ./ramdisk | gzip > ramdisk-new.gz通过以上命令将会在ramdisk目录下生成ramdisk-new.gz压缩文件
mkimage ramdisk.img RECOVERY > ramdisk-new.gz将ROOTFS的标记加入到ramdisk里,对于制作recovery.img以上的参数需要用RECOVERY,制作boot.img的时候以上的参数需要用ROOTFS
mkbootimage --kernel kernel --ramdisk ramdisk-new.gz --output recovery.img通过mkbootimg工具生成recovery.img文件
9,如何查看一个进程占用的文件以及一个文件被哪些进程占用
答:lsof工具和fuser工具,或者通过proc文件系统来查看。
0 0
- [文件系统]一些问题
- 开发板以网络文件系统启动的一些问题
- 使用nfs文件系统启动开发板的一些问题
- 文件系统,一些常用命令
- 记2416移植2.6.36内核和yaffs根文件系统时遇到的一些问题
- 有关文件系统的一些链接
- 文件系统开发中的一些总结。
- proc文件系统一些常用说明
- Linux文件系统的一些理解
- 关于文件系统的一些想法
- 关于文件系统的一些理解
- yaffs文件系统的问题
- jffs2 文件系统的问题
- Linux 文件系统问题汇总
- u盘文件系统问题
- nfs根文件系统问题
- cofs文件系统问题
- Fatfs文件系统崩溃问题
- linux内核简介
- Django 1.7 初级教程or学习笔记(一)
- HDU 5037 Frog(模拟跳石头的过程)
- 第一章 绪论
- Fragment的可见再加载的方法(真正的Fragment的OnResume和OnPause)
- [文件系统]一些问题
- NYOJ 303【序号互换】第四届河南省程序设计大赛
- 网游通讯加密的方案设计
- 【关于实验】网络:win7安装FTP服务器
- lua传参问题:无类的局限性
- c/c++获取系统时间
- debian 7 wheezy时间设置
- div浮动排版
- WEB基本表单及代码(HTML)