/*
达内学习 UC day07 2013-10-11
*/
回忆过去:
文件的一些函数 -lseek(),dup()/dup2(),fcntl()
fcntl() 复制文件描述符,获取设置文件标志,文件锁
fstat() 获取文件属性,(类似ls -l) 文件大小
今天:
文件的一些相关函数 -access()/chmod()/truncate()/umask()
mmap()映射文件,目录和目录操作,进程
目录操作的函数
mkdir() 新建目录
rmdir() 删除空目录
chdir() 改变当前目录
getcwd() 获取当前目录 以绝对路径方式获取当前路径(不打印pwd) 读目录的内容(获取文件和字目录)
opendir() 打开一个目录
readdir() 读目录的一个子项,循环读可以读所有
进程:ps -aux 察看进程(linux) UNIX不支持 用/user/ucb/ps 支持
ps -ef 通用察看进程命令(Unix/Linux)
1> 进程常见的状态:
S 休眠状态
O 可运行状态
R 运行状态
T 挂起状态
Z 僵尸进程(已经结束但自由没有回收的进程)
2> 父子进程之间的关系,父进程启动子进程,一个父进程可以启动多个子进程,一个子进程只能有一个父进程。
1 父进程启动子进程后,父子进程同时运行,如果子进程先结束,子进程会给父进程发信号,父进程回收子进程的资源。
2 如果父进程启动进程后,父子进程同时运行,如果父进程先结束,子进程变成孤儿进程,孤儿进程会认init进程(1)为新的父进程,init进程叫孤儿院
3 父进程启动子进程后,父子进程同时运行,如果子进程先结束,但是父进程没有收到子进程的信号,子进程变成僵尸进程.
3> 进程ID和常用函数
每个进程都有一个进程ID(PID),PID是进程的唯一标识,首先保证 同一时刻 进程ID不能出现重复,如果进程结束,PID可以 延迟重用
常见函数:
getpid() 获得当前进程的PID
getppid() 取当前进程福进程ID
getuid() 取当前有效用户的ID
geteuid() 取当前有效用户的ID
su 切换用户
4> 创建子进程的方式:
fork()
fork() + exec系列函数
fork() 是一个超级复杂的简单函数
fork()通过复制父进程的方式创建进程(照猫画虎)
fork()创建的子进程复制父进程的全局区,BSS段,堆区,栈区,和父进程共享代码区
fork()之前的代码只有父进程执行一次,fork()之后的代码父子进程分别执行一次(2次)
由于fork()内部一定是先创建子进程然后再返回,因此return 语句将执行2次,父进程返回子进程的PID,子进程返回0
fork() 创建子进程,不确定父子进程谁先运行
但是vfork()创建子进程,确保子进程先运行
在复制文件描述符号时,子进程之复制描述符,不复制文件表。
作业:
实现ls -l功能,针对文件(stat())