仓酷云

标题: Linux教程之利用读写缓冲仓酷云 [打印本页]

作者: 金色的骷髅    时间: 2015-1-18 11:29
标题: Linux教程之利用读写缓冲仓酷云
对于linux命令,一定要学会用man和info去查他们的解释;
我们渐渐来讲明为何要利用缓冲:
上面的代码是本人完成利用缓冲区的who命令完成。
#include<stdio.h>#include<utmp.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<sys/types.h>#include<fcntl.h>#defineBUFSIZE16//缓冲区中寄存16笔记录#defineNULLUT((structutmp*)NULL)//界说一个空指针,不指向任何实践的对象或函数#defineUTSIZE(sizeof(structutmp))#defineSHOWHOSTintmy_utmp_open(char*filename);structutmp*my_utmp_next();intmy_utmp_reload();voidmy_utmp_close();voidshow_info(structutmp*);staticcharutmpbuf[BUFSIZE*UTSIZE];//缓冲区巨细staticintnum_recs;//缓冲区中的数据个数staticintcur_rec;//缓冲区中已利用的数据个数staticintfd_utmp=-1;//utmp文件的形貌符intmy_utmp_open(char*filename){fd_utmp=open(filename,O_RDONLY);cur_rec=num_recs=0;returnfd_utmp;}structutmp*my_utmp_next(){structutmp*result;if(fd_utmp==-1)//文件翻开失利returnNULLUT;if(cur_rec==num_recs&&my_utmp_reload()==0)//缓冲区已读完,就从文件向缓冲区reload新内容。假如从文件中已读不出更多的内容,则前往空指针returnNULLUT;result=(structutmp*)&utmpbuf[cur_rec*UTSIZE];cur_rec++;returnresult;}intmy_utmp_reload(){intnum=read(fd_utmp,utmpbuf,BUFSIZE*UTSIZE);//最多读取16笔记录num_recs=num/UTSIZE;//实践读取的纪录数cur_rec=0;returnnum_recs;}voidmy_utmp_close(){if(fd_utmp!=-1)close(fd_utmp);}intmain(){structutmp*record;if(my_utmp_open("/var/run/utmp")==-1){//翻开文件perror("fopen");exit(0);}while((record=my_utmp_next())!=NULLUT){//轮回读取纪录(布局体)show_info(record);}my_utmp_close();//封闭文件return0;}voidshow_info(structutmp*buf){if(buf->ut_type!=USER_PROCESS)return;printf("%-8s",buf->ut_name);//输入用户名printf("%-12s",buf->ut_line);//终端设备名time_ttimelong=buf->ut_time;structtm*localnow=localtime(&timelong);printf("%d-%d-%d%d:%d",localnow->tm_year+1990,localnow->tm_mon+1,localnow->tm_mday,localnow->tm_hour,localnow->tm_min);//登录工夫#ifdefSHOWHOSTprintf("(%s)",buf->ut_host);#endifprintf("
"
);}内核缓冲区

办理员形式和用户形式之间切换必要工夫,比拟之下,磁盘I/O损耗的工夫更多,因而内核也使用缓冲手艺来进步对磁盘的会见速率。
因而read函数并非把数据间接从磁盘读到历程缓冲区,而是从内核缓冲区读到历程缓冲区;一样write也不会都招致内核的写磁盘操纵,只要当内核缓冲区堆集到必定量时才一次写进磁盘,偶然俄然断电,则内核缓冲区的数据会丧失。
当历程请求的数据块不在内核缓冲区时,内核把响应的数据加到哀求数据列表中,然后挂起该历程,为其他历程服务。一段工夫后(很短),内核把响应数据从磁盘读到内核缓冲区,然后再把数据复制到历程缓冲区,最初唤起被挂起的历程。

对于开发环境的选择尽量要轻量级和高度可定制,航空母舰级别的工具往往会让你迷惑不解;
作者: 若相依    时间: 2015-1-21 07:46
笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机
作者: 蒙在股里    时间: 2015-1-25 10:39
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
作者: 愤怒的大鸟    时间: 2015-1-27 12:24
为什么要学Linux呢?每个人都有不同的看法,下面我说说自己的感想吧。?
作者: 不帅    时间: 2015-2-3 09:29
Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。
作者: 飘灵儿    时间: 2015-2-8 20:02
这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。
作者: 活着的死人    时间: 2015-2-9 23:47
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
作者: 只想知道    时间: 2015-2-28 08:49
发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。
作者: 小女巫    时间: 2015-3-8 18:57
永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。
作者: 变相怪杰    时间: 2015-3-16 11:43
安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果Linux说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
作者: 分手快乐    时间: 2015-3-22 22:16
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2