2016-01-27
登录名
登录名通常在/etc/passwd中,item中7项分别代表登录名,加密口令,数字id,数字组,注释字段,起始目录及shell程序
常用的shell有Bourne shell /bin/sh C shell /bin/csh KornShell /bin/ksh
其中Bourne shell比较流行
文件系统
stat和fstat函数返回一个包含所有文件属性的信息结构
文件名
斜线(/)和null不能出现在文件名中。当创建一个新目录是自动创建了.和..分别代表当前目录和父目录。文件系统中文件名最长255
读取根目录程序如下
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, const char * argv[]) {
DIR *dir;
struct dirent *dirp;
if (argc == 1) {
dir = opendir("/");
} else if (argc == 2) {
dir = opendir(argv[1]);
}
while ((dirp = readdir(dir)) != NULL) {
printf("%s\n",dirp->d_name);
}
closedir(dir);
return 0;
}
工作目录
每个进程都有一个工作目录也称当前工作目录,所有相对路径都从工作目录开始解释。进程可以用chdir函数更改工作目录
起始目录
登陆时,工作目录设置为起始目录,该目录从口令文件中读取
输入和输出
文件描述符:内核用于标识一个特定进程正在存访的文件,为非负整数。
一般情况下每当运行一个新程序时所有she'll都为其打开三个文件描述符:标准输入、标准输出及标准出错。如果简单命令没有特殊处理则它们都连向终端。ls > file.list 为重定向
不用缓存的io
open read write lseek close提供了不用缓存的io 它们都用文件描述符进行工作
<unistd.h>中包含了STDIN_FILENO和STDOUT_FILENO它们制定了标准输入和标准输出的文件描述符
标准io
标准io提供一种对不用缓存的io函数的带缓存的界面,无需担心如何选择缓存。如 fgets能完整读取一行 printf等 标准io一般包含在 <stdio.h>中
getc putc一次读一个字符 stdin stdout分别表示标准输入和标准输出文件
程序和进程
程序:存放在磁盘文件中的可执行文件,使用6个exec函数中的一个由内核将程序读入存储器并执行
程序的执行实力被称为进程,每个进程的唯一数字标识为进程id为非负值
进程控制的主要函数 fork exec waitpid
调用fork创建一个新进程,新进程是调用进程的复制品,调用进程是父进程,新创建进程为紫禁城。fork对父进程返回新紫禁城的非负进程id,对子进程则返回0.子进程也从fork处开始执行。
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, const char * argv[]) {
pid_t pid;
pid = fork();
if (pid > 0) {
printf("I am the parent pid = %d\n", pid);
} else if (pid == 0) {
printf("I am child!\n");
}
return 0;
}
execlp函数从PATH环境变量所指的目中查找符合参数file的文件名,找到后执行该文件,然后将第二个以后的参数当做文件的arg[0]、arg[1]...
如果执行成功则函数不会返回,执行失败则返回-1。eg execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
waitpid 此函数会阻塞当前进程直至有信号传来或者进程结束
网友评论