随笔分类 -  Linux/Unix

摘要:启发主要来自于http://blog.csdn.net/newnewman80/article/details/7050090,基本是根据自己的习惯重组的。相关函数:kthread_create():创建内核线程struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...); kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的... 阅读全文
posted @ 2012-06-28 17:39 五岳 阅读(1644) 评论(0) 推荐(0) 编辑
摘要:原先曾以Socket编程为入口开始自己的新的学习,毕竟未曾致用,时至今日已比较生疏。借着阅读《UNIX网络编程(卷一)》(简称UNPv1)的机会,正好复习一番,而且希望将新的感受记录下来。一些技术细节翻阅原书即可,点到为止,不在这篇博文详述。 作者推荐在网络编程中使用snprintf()代替sprintf()、用fget()、strncat()和strncpy()分别代替gets()、strcat()和strcpy();同时提到了更好的替代函数strlcat()和strlcpy()。具体原因是前者的调用会使缓冲区溢出,而这是黑客网络入侵的一种方式。snprintf()需要缓冲区长度作为显... 阅读全文
posted @ 2012-06-19 20:48 五岳 阅读(1290) 评论(0) 推荐(0) 编辑
摘要:在open、read、write的参数中,mode的接口提供的比较方便,通过对fs/namei.c中vfs_create()中添加判断,解除对高位的事后修改就能传入到文件的i_mode。然而i_mode各个位基本已被使用完毕,使用新的组合的mode可能会将这一类文件变为“古怪的文件”,虽然能用open()、read()、write()进行操作,但是不能用vi等工具打开,原因可能是没有针对这种mode添加进一步的其他操作,用起来并不像S_IFREG这种普通文件这么方便。 经指点和启发,使用这三个函数的flag位进行扩充是可行的,以下是实现方法。本文以2.6.13的内核为例。 /inclu... 阅读全文
posted @ 2012-06-04 11:44 五岳 阅读(3074) 评论(0) 推荐(0) 编辑
摘要:其实用这个标题随便baidu、Google出来都是一大堆,大部分都是转来转去,代码无非那么几种。可是真正编译通过还是费了不少功夫,我在双系统的Ubuntu10.04和虚拟机里的Red Hat9里来来回回不知折腾了多少次。所以本文更多的是记录下自己调试的细节,而不是简单的粘代码和转载。 目的是在不重新编译内核的前提下添加系统调用,思路倒是很简单,修改映射在内存中的系统调用表,把一个空闲的系统调用表项指向自己写的模块中的函数,如果是已使用的表项,甚至可以实现系统调用劫持。 分配的空闲的系统调用号依然要在源码的asm/unistd.h中去找,只是不用修改。如果没有unused的,怕是还是得重... 阅读全文
posted @ 2012-05-20 17:41 五岳 阅读(3592) 评论(0) 推荐(0) 编辑
摘要:近日按照《Linux内核的设计与实现》尝试编译内核,遇到很多问题,也学到不少经验。1. 由于需要使用一个较老版本的内核,而后从别人处拷贝的tag.bz2是损坏的。原先并没有在http://www.kernel.org/看到所需要的内核,通过搜索知道较旧的内核可以从类似于http://www.kernel.org/pub/linux/kernel/v2.6/命名规则的页面下载。2. 如果已经安装Win7且磁盘系统转换为NTFS,用EasyBCD硬盘安装Win7+Ubuntu双系统不可行3. 2.6.13内核需要2.95.3版本的gcc4. 练习内核编译时,可以使用比系统自带内核稍微新一些... 阅读全文
posted @ 2012-05-07 09:35 五岳 阅读(1122) 评论(1) 推荐(0) 编辑
摘要:select提供的轮询会随着fd数目的增长降低效率,并且其上限是系统定义过的。UNP上select的例子需要编程者自己维护一个fd使用情况的结构,很抽象繁琐。后面的poll的例子和本文提到的epoll使用方法差不多,这是因为高级polling技术没有标准,各个操纵系统的实现不一样,而epoll是由Linux提供的,是对poll的改进。个人感觉区别在于epoll对缓冲池的维护(事件的加入和维护)更简单。 通过对一篇文章(http://blog.csdn.net/ljx0305/article/details/4065058,已转载至“文章”一栏)的学习,笔者试着修改了并调试通过了C语言版的... 阅读全文
posted @ 2012-05-02 11:38 五岳 阅读(3624) 评论(0) 推荐(1) 编辑
摘要:以前在课堂上学习过《Unix初级教程(第四版)》,对于Unix有了一点了解。由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本《Unix环境高级编程》便在此列。希望能通过这本书了解Linux的API,并在这个过程中了解Linux系统的机制。书中内容丰富,有以前了解的,更多的是不了解的。作为第一次阅读,目的不在于事无巨细,过目不忘,而是有个大体了解,从点到面地熟悉这个系统。为了构建整体的印象,对已知的和刚刚了解的都有所涉及。同时作为笔记,不希望成为对目录的简单复制,而是能成为对学习的程度和体会的记录。第一章 基础知识 这一章本身就是概括,略。 旧知: 体系结构、... 阅读全文
posted @ 2012-04-11 20:50 五岳 阅读(2867) 评论(0) 推荐(0) 编辑
摘要:近期课程的作业需要用到RPC编程,除了课堂上学到的知识,还得亲自动手。打算先写个简单的HelloWorld练习一下,顺便复习一下学到的知识。 RPC意为远程过程调用协议(Remote Procedure Call Protocol)。编制好单机应用程序,然后划分为两个或多个程序片,加入通信协议使得每片可以在单独的计算机上运行。从一个程序片调用另一个程序片的过程称为远程过程调用,即RPC。它是一个C/S模型,调用程序称为rpc client,被调用程序片称为rpc server。 对于RPC的编程过程可以简化如下:1.构建解决问题的常规应用程序;2.选择一组过程形成远程程序,以便将远程程... 阅读全文
posted @ 2011-11-26 02:13 五岳 阅读(4733) 评论(0) 推荐(1) 编辑
摘要:由于学习安排的改变,对Unix的进一步的学习需要稍微推后一些了。这里把《Unix初级教程(第四版)》中其他指令记录和操作一下,以备以后的查阅。1.shell重定向 命令 > 文件名 保存输出到指定文件(新建或完全覆盖) 命令 >> 文件名 保存输出到指定文件(追加至结尾) 命令 < 文件名 从文件得到输入 命令 << 文件名 同上,一般在脚本使用2.简单指令date、cal:时间类passwd:密码修改pwd、ls、cd:目录查看和操作echolp、pr:打印cat,mkdir,rmdir,rm,cp,ln,mv(移动或改名):文件操作,后三个格式为comm 阅读全文
posted @ 2011-07-20 21:38 五岳 阅读(484) 评论(0) 推荐(0) 编辑
摘要:同上一篇一样,资料来自于《Unix初级教程(第四版)》。1.启动-R 只读方式打开,但打开后如果有权限,可以强制执行保存。-c (command)加载后执行命令,比如"vim -c /most myfirst" 打开该文件后直接向后搜索most。更多的可以参考 -h2.同时编辑多个文件vim [file1] [file2] ...此时:ar 查看当前编辑的文件名:n 切换当前编辑的文件另外还有:e 切换到新文件:w 读取已存在的文件并将其内容放入正在编辑的文件中:w [起始行][终结行] [文件名] 将当前文件部分放于新文件中,若已存在则覆盖。3.文本重排命令模式下dd 删 阅读全文
posted @ 2011-07-20 11:22 五岳 阅读(774) 评论(0) 推荐(1) 编辑
摘要:最近在用Ubuntu11.04重新学习以前没怎么学好的Unix,不过在VMware7.1.4下Ubuntu11.04的X Window表现不是很好。这都无所谓,先把命令行的基础打好再说。 Ubuntu的Vi也不好用,搞了个Vim用来学习了,简单记录下它的基本操作,备用,来源于《Unix初级教程... 阅读全文
posted @ 2011-07-19 16:15 五岳 阅读(4256) 评论(2) 推荐(0) 编辑

回到顶部