UNIX环境高级编程
yao_hust_iAC
这个作者很懒,什么都没留下…
展开
-
《UNIX环境高级编程》读书笔记之文件IO(1)
1.文件描述符 对于原创 2014-09-04 21:48:15 · 494 阅读 · 0 评论 -
自己动手写shell命令之ls
linux下ls命令(支持-R参数)的c语言实现: #include #include #include #include #include #include #include void do_ls(char *); void do_stat(char *,char *); void show_file_info(char *,struct stat *,char *); voi原创 2014-10-15 13:26:34 · 2652 阅读 · 2 评论 -
自己动手写shell命令之ls -R1fF
ls命令的R参数代表递归的列出所有子文件夹中的所有文件,1表示每一行只显示一个文件或文件夹,f表示不排序即输出,F表示在每项的输出的最后根据其文件类型相应的加上*/=>@|字符。通过c语言实现ls -R1fF命令的效果,其源代码如下:#include #include #include #include #include #include #include void listdir原创 2014-10-15 20:05:25 · 1633 阅读 · 0 评论 -
自己动手写shell命令之pwd
思路:(1)得到"."的i节点号,称其为n(使用stat) (2)chdir ..(使用chdir) (3)找到inode号为n的节点,得到其文件名。 重复上述操作直到当前目录“.”的inode值等于".."的inode值 #include #include #include #include ino_t get_inode(char *); void pr原创 2014-10-16 11:32:23 · 2737 阅读 · 0 评论 -
自己动手写shell命令之du
du命令可以查看指定文件夹占用的磁块数,以下为linux下c语言实现shell du指令的代码(支持-k选项): #include #include #include #include #include int disk_usage(char *); int k = 0; int main(int argc,char * argv[]) { int i; for(i = 1;原创 2014-10-16 17:12:42 · 1776 阅读 · 0 评论 -
自己动手写shell命令之write
Linux下write命令允许用户跟其他终端上的用户对话。用c语言实现shell命令write,代码如下: #include #include #include #include #include #include #include #include #include char * get_terminal_name(char *); char * get_terminal_原创 2014-10-17 18:28:36 · 3610 阅读 · 1 评论 -
Linux C Project :pong
在linux下用c语言利用信号机制完成了一个弹球的小游戏,代码如下: bounce.h /* bounce.h */ /* some settings for the game */ #define BLANK ' ' #define DFL_SYMBOL 'o' #define TOP_ROW 5 #define BOT_ROW 20 #define LEFT_EDGE原创 2014-10-21 10:18:27 · 1187 阅读 · 1 评论 -
《UNIX环境高级编程》读书笔记之线程(1)
1.线程标识 就像每个进程有一个进程ID一样,每个线程也都有一个线程ID。进程ID在整个系统中是唯一的,但线程ID不同,线程ID只在它所属的进程环境中有效。线程ID用pthread_t数据类型来表示,通过pthread_equal函数来比较两线程ID是否相同,通过pthread_equal函数可以得到当前线程的ID。 #include int pthread_equal(pthre原创 2014-11-24 19:32:44 · 872 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之线程(2)
1.线程属性 可以使用pthread_attr_t结构来指定线程的属性,并把这些属性与线程联系起来。可以使用pthread_attr_init函数来初始化pthread_attr_t对象为系统线程属性的默认值。 下图给定了各系统中定义的线程属性。 如果对线程的终止状态不感兴趣,可以修改pthread_attr_t结构中的detachstate属性,让线程一开始就处于分离状态,可以采用pt原创 2014-11-25 20:14:15 · 1198 阅读 · 0 评论 -
孤儿进程与僵尸进程
一、定义:什么是孤儿进程和僵尸进程 僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。 僵尸进程将会导致资源浪费,而孤儿则不会。 子进程持续10秒钟的僵尸状转载 2015-03-15 10:46:11 · 351 阅读 · 0 评论 -
《UNIX环境网络编程》读书笔记之I/O复用
1.I/O复用使用在下列网络应用场合: a.当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用。 b.如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用。 c.如果一个服务器既要处理TCP,又要处理UDP,就要用到I/O复用 d.如果一个服务器要处理多个服务或多个协议,一般就要使用I/O复用。 2.I/O模型原创 2015-03-26 10:03:09 · 702 阅读 · 0 评论 -
select,poll,epoll的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2015-04-15 16:03:39 · 426 阅读 · 0 评论 -
GDB命令
用GDB调试程序 GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行 软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可 以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成 更转载 2015-04-15 18:08:55 · 369 阅读 · 0 评论 -
自己动手写shell命令之more
unix下more命令的简单实现: #include #define PAGELEN 24 #define LINELEN 512 int do_more(FILE * file); int see_more(FILE * file); int main(int argc,char * argv[]) { FILE * fp; if(argc == 1) do_more(std原创 2014-10-13 14:59:10 · 1403 阅读 · 0 评论 -
自己动手写shell命令之who
思路:在unix系统中有一个名为utmp的文件,里面存着当前登录到系统中用户的信息。utmp这个文件里面保存的是结构数组,数组元素是utmp类型的结构。实现who命令,只要依次从utmp文件中读出utmp类型的结构体,然后通过合适的方式将它显示出来即可。如果每一次只从文件里面读一个结构体数据,那么每一个结构体都要进行依次系统调用。而又因为系统调用比较耗时(涉及到用户态到核心态的切换),所以这样会造原创 2014-10-13 21:14:50 · 2196 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之文件IO(2)
第三章 文件IO课后习题 3.1当读写磁盘文件时,本章中所述的函数的确是不带缓冲机制的吗? 所有的IO都要经过内核的块缓冲区。书中所提到的术语“不带缓存的IO”是指进程不会自动的为这些IO函数缓冲,每次原创 2014-09-05 15:04:33 · 395 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之进程环境
1.进程终止 有八种方式使进程终止 (1)从main返回 (2)调用exit; (3)调用_exit或者_Exit; (4)最后一个线程从其启动历程返回 (5)最后一个线程调用pthread_exit; 异常终止方式有三种: (6)调用abort(); (7)接到一个信号; (8)最后一个线程对取消请求做出相应 三个函数用于正常终止一个程序: #include原创 2014-09-19 16:45:56 · 700 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之文件和目录(1)
1.函数stat(),fstat(),fstatat(),lstat()。 #include int stat(const char * pathname,struct stat * buf); int fstat(int fd,struct stat * buf); int lstat(const char * pathname,struct stat * buf); int f原创 2014-09-05 15:36:18 · 1721 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之文件与目录(2)
动手练习: (1)自己实现ls命令 #include #include int ls(int argc,char * argv[]) { int i; for(i = 2;i < argc;i++) { DIR * dp; struct dirent *dirp; if((dp = opendir(argv[i])) == NU原创 2014-09-13 10:53:29 · 747 阅读 · 0 评论 -
《UNIX高级环境编程》读书笔记之文件与目录(3)
自己实现umask命令原创 2014-09-14 22:21:06 · 1089 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之标准IO库(1)
1.对于ACSii字符集,一个字符用一个字节表示。对于国际字符集,一个字符需要由多个字符表示。标准I/O文件流可以用于单字节或多字节字符集。流的定向决定了所读写的字符是单字节的还是多字节的。只有两个函数可以改变流的定向。freopen()函数清除一个流的定向;fwide()函数可用于设置流的定向。 #include #include int fwide(FILE * fp,int mod原创 2014-09-15 15:37:48 · 793 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之系统数据文件和信息(1)
1.UNIX系统口令文件包含了下图所示的各字段,这些字段包含在中定义的passwd结构体中 POSIX定义了两个获取口令文件项的函数。在给出用户登录名或用户ID后。这两个函数就能查看相关项。 #include struct passwd *getpwuid(uid_t uid); struct passwd *getpwnam(const char *name); 如果想要查看原创 2014-09-17 11:34:46 · 798 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之进程控制
1.进程标识 每个进程都有非负整型标示的唯一进程ID。系统中有一些特殊的进程,如ID为0的进程为调度进程,常被称为交换进程(swapper)。进程ID为1的进程为init进程,此进程负责启动UNIX系统。init进程是一个普通的用户进程,但是它是以超级用户权限运行的。init进程会成为所有孤儿进程(父进程已死亡的进程)的父进程。 除了进程ID,UNIX进程还有其他一些标示符。他们可以通过下列函原创 2014-09-25 15:44:57 · 833 阅读 · 0 评论 -
自己动手写shell之chgrp,chown,chmod
chgrp,chown,chmod的c语言实现原创 2014-09-17 21:28:49 · 1356 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之进程关系
1.进程组 每个进程除了有一进程ID之外,还属于一个进程组。进程组中的各个进程接受来自同一终端的各种信号。每个进程组有唯一的进程组ID。 #include pid_t getpgrp(void)//得到调用进程的进程组ID 每个进程组都有一个组长。组长进程的进程组ID等于其进程ID。 进程可以调用setpgid加入一个现有的进程组或者创建一个新的进程组。 #include int原创 2014-09-28 21:43:54 · 1021 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之信号(1)
1.信号的概念 信号时软中断,它提供了一种处理异步时间的方法。 很多条件都会产生信号: (1)用户按某些键时,引发终端产生信号。 (2)硬件异常产生信号:除数0,无效的内存引用等。 (3)进程调用kill,可以将任意信号发送给任意进程或进程组。 (4)当检测到某种软件条件已经发生时。例如SIGURG,SIGPIPE和SIGALRM。 当某种信号出现时,可以告诉内核使用下列三种方式来处原创 2014-10-11 10:33:48 · 818 阅读 · 0 评论 -
《UNIX环境高级编程》读书笔记之信号(2)
1.函数sigaction sigaction函数的功能是检查或修改与指定信号相关联的处理动作。其函数原型如下: #inlcude int sigaction(int signo,const struct sigaction * restrict act,struct sigaction * restrict act); 其中参数signo是要检测或修改其具体动作的信号编号。若act指针原创 2014-10-11 16:57:03 · 919 阅读 · 0 评论 -
《TCP/IP详解卷1:协议》读书笔记
UDP协议 1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。 2.UDP协议头 2.1.UDP端口号 由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此,例如某一个UD转载 2015-03-24 11:41:09 · 825 阅读 · 0 评论