自学:Unix环境高级编程 第一章 Unix基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自学:Unix环境高级编程 第一章 Unix基础知识相关的知识,希望对你有一定的参考价值。
1.2 Unix体系结构
内核(kernel):控制计算机硬件资源,提供程序运行环境。
系统调用(system call):内核的接口。
公用函数库构建在系统调用接口之上。
应用程序既可使用公用函数库,也可使用系统调用
shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。
1.3 登录
1.登录名
系统在其口令文件(通常是/etc/passwd文件)中查看登录名。
例如:sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
口令文件中的登录项由7个以冒号分隔的字段组成,依次是:登录名,加密口令,数字用户ID(205),数字组ID(105),注释字段,起始目录(/home/sar)以及shell程序(bin/ksh)
2.shell
shell是一个命令行解释器,它读取用户输入,然后执行命令。
shell的用户输入通常来自于终端(交互式shell),或者称为shell脚本的文件。
1.4 文件和目录
1.文件系统
Unix文件系统是目录和文件的一种层次结构,所有东西的起点是称为根(root)的目录,这个目录的名称是一个字符"/"
目录(directory)是一个包含目录项的文件。
逻辑上来说,每个目录项都包含:
文件类型(普通文件还是目录等)
文件大小
文件所有者
文件权限(其他用户能否访问该文件)
文件最后的修改时间
一个文件名
说明该文件属性的信息
stat和fstat函数返回包含所有文件属性的一个信息结构。
2.文件名
斜线(/)和空字符不能出现在文件名中。因为斜线用来分隔构成路径名的各文件名,空字符则用来终止一个路径名。
创建新目录时会自动创建两个文件名:. 和 ..。 . 指向当前目录, .. 指向父目录。在最高层次的根目录中,..和.相同。
3.路径名
以斜线开头的路径名为绝对路径名(absolute pathname),否则称为相对路径名(relative pathname)。相对路径名指向相对于当前目录的文件。
例子:列出目录中所有文件的名字
#include "apue.h" #include <dirent.h> int main(int argc, char *argv[]) { DIR *dp; struct dirent *dirp; if(argc != 2) err_quit("usage: ls directory_name"); if((dp = opendir(argv[1])) == NULL) err_sys("can‘t open %s", argv[1]); while((dirp = readdir(dp)) != NULL) printf("%s\n", dirp->d_name); closedir(dp); exit(0); }
但是这个例子直接gcc编译会出错,有两种解决办法:
1. http://www.yjs001.cn/view/40600113873585292949.html
这个方法跟着做,应该是可以解决问题,但是我并没有成功....
2. https://my.oschina.net/zhichi2011/blog/80402
这个方法相对简单,只要去http://www.apuebook.com/code2e.html下载源代码,找到apue.2e/lib/error.c,复制到保存例子代码的文件夹,一起编译就可以了。
另外:
linux下解压tar.gz文件的命令是: tar zxvf 文件名.tar.gz
这个链接有汇总:http://www.centoscn.com/CentOS/help/2014/0613/3133.html
然后,运行编译完成的文件时需要添加参数,比如编译完成后的文件叫做example。
运行时:./example /home
上面的命令会列出home文件夹下的所有文件。
小结:这一章并没有什么太多的感想,只是觉得有满多概念要记,Linux系统不太熟,很多命令不知道,需要现查现用。最后的例子也只能照着敲,里面具体的原理也并不是很懂。今天就先这样,睡去了。
以上是关于自学:Unix环境高级编程 第一章 Unix基础知识的主要内容,如果未能解决你的问题,请参考以下文章