Unix C的文件指针与文件描述符


AISC C中通常用文件指针FILE *进行文件的操作,如fopen, fclose, fread, fwrite, fscanf, fprintf等函数,都是通过文件指针进行文件的一系列操作;而类Unix系统则大多用文件描述符(file descriptor)进行文件的操作,如open, close, read, write等函数,文件描述符是一个整数,是文件描述符表(file descriptor table)中的索引(文件描述符表其实是维护进程打开的文件)。当进程打开或者创建一个文件,内核便会在此进程对应的文件描述符表中分配一个位置,然后便可通过文件描述符操作文件。

Read more ⟶

Ruby环境的搭建


Ruby简介

第一次听到Ruby这个名词,可能会比较陌生,进而产生畏惧,毕竟在中国这片区域普及率还不是很高,但在世界范围内还是有不错的影响力,如果有所质疑,可以参考TIOBE上Ruby的排名情况,进几年一直在前10左右徘徊。到目前为止,大家可能只了解到Ruby是一门编程语言,具体还未做了解,那这里引用Ruby官网的解释,供大家参考:

Ruby is a dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.

用再多的语言描述都略显苍白,只有身临其中把玩一番才能有所体会,而且这种感触才最直观,最有说服力。这里,贴出一个网址,便可在浏览器中体验Ruby之美:

http://tryruby.org/levels/1/challenges/0

请感受它的魅力所在吧。

Read more ⟶

有关实习的一些感受


前几天看了一篇文章,现在依然清晰的记得其中大意:

人一生其实很短暂,只有30000天左右可供挥霍,所以请认真地对待每一天,抓紧时间做自己想做的事,不要给今后留有遗憾。

细细思索一番,我的人生已过1/3,而其中的大部分时间却没有主动选择自己想过的生活,没有走自己想走的路,顿时心生悲哀,失落之情不禁涌上心头。二十五载的不断尝试、不断摸索,终于找准了自己人生的方向,已是万幸,接下来便是坚定不移的走下去了。也许随着年龄的增长,眼界心界不断改变,方向也会随之变化,这我无法左右,未来的事谁能说的准。唯一能做的就是坚定不移的走当前已确立的路,同时记录自己人生的历程,以此慰藉当前的心,同时也算是给未来的自己留一扇观察当前自己的窗。

一月之余不写博客了,感觉无从写起。生活太过平淡,太过安逸,以致没有什么可值得念叨值得回味的故事,唯一记忆较深的当属实习之事了。自从12年上半年接触Ruby以来,一直断断续续的学习,时而放下,时而拾起。就在上上周(4.25号左右),无意在RubyChina上看到一则西安Ruby&Rails实习生招聘的信息,而且对实习生的技能要求我也符合,便给他们回邮件并附上自己简历,过了不到一天便给我回复让我去聊聊。听到“聊聊”这词,以为只是搞技术的人之间相互交流,不需要再带纸质简历什么的。结果刚到之后,公司前台人员直接来一句:“你带了简历么?”,我顿时伤了,心想电子简历都给你们发了,不一样么,还带什么纸质简历,经过这次算是长知识了。由于是小公司,老板是搞技术的,所以直接和老板聊的。聊完之后便让填个人基本信息,在填的过程中发现来了Rubyists圈子的一位朋友也来应聘,而且也是Rails,我俩的不同就是我是实习,他是正式。只想说西安Rubyists圈子很小,我了解认识的Thoughtworks大概占了70%以上,剩下的就是当作业余爱好来学习的,比如我。

Read more ⟶

Git远程分支的一些操作


我是个爱折腾的人,昨天晚上突然看着自己的博客主题不爽,便立马将其从原先的Greyshade换到现在的Cleanpress。换完并构思一篇新博客之后,再次提交到GitHub上,得到提示此分支滞后于GitHub上,采用git pull又产生了太多冲突,冲突少手动解决还可,太多更改起来太麻烦,便萌生推掉远程分支重新提交的念头。可之前从未对远程分支做过相关的操作,只是偶尔删除远程库上的单个文件而已,又不得不求助Google了。碰到问题在解决过程中总是会学到很多,并且记忆深刻,现予以记录,方便自己,也回馈社会。

删除之前先查看远程分支,在确定的情况下再作删除,以致不会删错。

查看远程分支

采用git branch -a可查看所有的分支(本地+远程),而git branch -r仅显示远程。如果打开颜色支持,还会看到远程分支的颜色与本地不同。

Read more ⟶

随时随地用Octopress写博客


Octopress所依赖的环境是Ruby和Git,所以要使用它写博客,必须先确保目标机器上已经安装Ruby和Git。有时候可能需要在新的环境中创作,那么得进行以下的一些操作了。在讲操作前先简要介绍下Octopress如何工作。

Octopress是怎么工作的?

Octopress默认有两个分支,即master和source。source分支主要存储用于生成博客的源文件,而master分支则主要包含生成后的博客。master分支存储在_deploy文件夹中,之所以以下划线命名,是因为在执行git push origin source时,下划线开头的文件夹会被忽略掉。

当然,也可以创建自己的分支,但master分支一般主要用于存储生成后的博客,而博客源文件则可以自己新建分支存储。我目前在原有的基础上新建了newtheme分支,用于更改主题后的博客源码存储,以前的源码存储在source分支。

创建本地Octopress库

在新环境中写作时,需要进行以下几个步骤:

Read more ⟶

有关安卓刷机的一些感受


![](img /images/20140330.jpg) 生命的乐趣在于体验各种新奇,每次尝试都会从中收获兴奋和快乐,同时也会有小小的成就感。但伴随这些快乐的往往是挫折,所以偷偷乐的同时也要正确看待这些不愉快的成分,其实他们就是生活的调味品,在充斥欢乐的时候来点不和谐的东西往往让人记忆深刻,生活需要刺激。

平时一直都处于神游迷离的状态,突然脑中会闪过一丝新奇想法。这不前几天玩三国杀玩到吐的时候,突然闪过刷机的念头,于是在晚上将近12点的时刻,开始了刷机之旅。网上有关各种机型的刷机教程早已铺天盖地,随处可见,也有刷机过程时出现的各种问题。我也将加入这一行列,成为其中一员。

Read more ⟶

C语言中的Segment fault问题


![](img /images/20140315.jpg)

什么是Segment fault?

a segmentation fault (often shortened to segfault) or access violation is a fault raised by hardware with memory protection, notifying an operating system (OS) about a memory access violation; on x86 computers this is a form of general protection fault.

以上为Wikipedia对段错误的解释。用通俗易懂的话来说就是访问越界,访问了不存在或者受操作系统保护的内存,通常都是由于数组越界或者指针引起。

产生段错误的原因

  1. dereferencing NULL
  2. dereferencing an uninitialized pointer
  3. deferencing a pointer that has been freed/out of scope
  4. writing off the end of an array
  5. recursive function that uses all of the stack space
Read more ⟶

2014西安归途随笔


从1月20号到现在已有20多天了,说长不长,说短不短。回家的这段日子里很惬意,每天睡觉睡到自然醒,吃就更不用说了,无论在哪都不及家里吃的放心舒心,至于住么,家里自然比学校宿舍舒服多了。唯一美中不足的就是缺乏学习的氛围,不管多闲,都没心思整理开题报告,学习便更不用说了。一开始将其归结于家里没网,不过仔细琢磨下还是学习的气氛不够,导致自己变得懒惰。幸好在家呆的时间不是很长,不然真的要懒得无以复加。

本来回去之前便已将回程票买好了,买的2.16的,从武昌走。原计划是提前去武汉玩两天再走,毕竟武汉哥们好几个,随意蹭个吃住不成问题。哪知导师开始催(其实也谈不上催,就QQ上发了一个他专署的?而已,顿时感觉情况不妙,赶紧问问教研室的同学,没想到同级的都去了好几个,而且老师前几天给他们说了句:研究生应该过完初十就来的,这。。。不敢久留,立马抢了张12号的票),便匆匆踏上了回西安的旅途。

Read more ⟶

vim插件之surround.vim


Surround.vim插件简介

[Surround.vim] 1 是一款关于括号、引号和xml标签匹配的插件,可以成对的添加、修改和删除。当然也可以自定义匹配项。下面就常用的功能分别对标记的添加、修改和删除一一介绍。

添加

如现有一文本Hello,wolrd。光标处在文本中,然后输入ysiw",文本变成:

"Hello,world"

yss则将光标所在的当前行全部添加标签。如yss)则将当前行用()包围。

Read more ⟶

回首2013,展望2014


回首过去这一年,无论从技术还是思维上,都有很大的提升,但要我数萝卜下窖似的列举出来,我还真的列不出。只清楚地记得以下几件大事:

  1. 将博客从CSDN迁移到Octopress上。之所以迁移到Octopress上,是因为Octopress基于Jekyll,而Jekyll采用Ruby语言实现,恰巧我又迷上了Ruby。另一个原因是Octopress采用Markdown语法实现,排版更方便,简单的几个符号便能搞定,而且更美观。自从用了Markdown语法排版后,腰不酸了,腿不疼了。剩余的时间则可投入写作,何乐而不为呢?最大的好处是易迁移,只不过现在暂时还没有切身的体会,想想罢了,毕竟托管到GitHub上对于目前阶段已经够用,不必花钱买VPS,但不排除以后有钱了弄个VPS折腾下。那时候迁移也方便,所有的博客都是通过Jekyll引擎将markdown格式的文本转换为静态的Html文档,简单的拷贝下便可以了,而且还可以很方便的进行备份。其实与他人协作共同管理博客也是轻而易举的事了,只不过目前没这必要。
Read more ⟶