现在的位置: 首页 > 综合 > 正文

UNIX环境编程 学习1

2018年05月03日 ⁄ 综合 ⁄ 共 1352字 ⁄ 字号 评论关闭

1 /etc/passwd 各个字段意思

linux 系统用户信息  /etc/passwd 这个口令文件 由7个以冒号分割的字段组成,它们是:用户名,加密口令,用户ID,用户组ID,注释字段,家目录,shell程序。如

work:x:501:501::/home/work:/bin/bash

当我们了解到历史缘由后,会更好地理解采用某种特定实现技术的原因。

当一个文件具有多个硬连接时,很难保持多个属性副本之间的同步。

现在的文件名 至少支持255个字符。

以斜线开头的路径是 绝对路径,否则是相对路径。

Linux 中 cc 通常链接至gcc  /usr/bin/cc -> gcc

程序内可以使用chdir() 改变其工作目录  Python 中为 os.chdir('/home/work')

相对目录 和  绝对目录

登陆时的 工作目录是其实目录 ,是又口令文件/etc/passwd 中的相应用户的登陆项获得。

pid = fork () 

pid 等于 0 的是子进程

fork向父进程 返回 新进程的PID,对子进程则返回 0 。fork()被调用一次 ,但是返回两次。

调用exec函数时,新进程会替换原来的进程。 用这种方式来启动一个程序。spawn

父进程需要等待子进程。waitpid(), 并获取子进程的终止状态。

运行一个程序,就要考虑给它传参。

线程和线程ID

通常一个进程只有一个控制线程 。 

线程也用ID表示,但是线程ID只在 进程内起作用 。

在进程模型建立很久之后,线程模型才被引用到UNIX系统中。

函数出错一般返回一个 负值或者一个空指针

errno 如果没有出错,其值不会被另一个例程清楚,因此仅当在出错时候才去检查errno的值, 因为errno中可能是某次出错的值。

errno的所有常量都不为0

#include <string.h>

char * strerror( int errnum) ;

#include <stdio.h>

void perror( const char *msg);

改善程序的健壮性:这个问题本质是 ,程序如果出错了,是让程序自己去处理,还是由人工来处理。 如果全部错误都交给程序去处理,那么程序就会变得非常复杂,可能出错判断 远远多于了 正常的业务, 比如 路由器这样的 程序。 因为这类设备 安装一次 就再 不维护了。 

然而对于互联网的程序来说,如果人每天上班都能维护, 就可以大大减轻程序 的负担, 交出一些 责任由人去定期检查 。  这是人力成本的上升 。 最终 这是一个权衡的事情 。但是 程序的逻辑再严密,还是要必要的人力检查 。在互联网业务中。

用户ID为0的是 root 用户 

Max OS 禁用超级用户,需要开启。

组文件 /etc/group

附加组ID, 一个用户可允许加入之多16个组。

使用kill 函数发送信号, 我们必须是该进程的所有者 或者 超级用户 。

时间值 分为 日历时间 和 进程时间

日历时间是 到 1970年的秒数

进程时间 包括 时钟时间 , 用户CPU时间, 系统CPU时间。 用time 来取得。

Linux大约提供了250个 系统调用

必要时,我们可以替换库函数,但却不能替换 系统调用。

用户代码  -- malloc (存储分配函数 )-- sbrk (系统调用) -- 内核

应用程序 调用 库函数 + 系统调用  ,很多库函数都是调用 系统调用 。

系统调用通常提供一个最小接口 ,而库函数 提供比较复杂的功能 。

进程控制系统调用 通常由用户 直接调用 。

好书的特点是 看起来不吃力。

抱歉!评论已关闭.