您的位置:首页 > 编程语言

UNIX基础知识--<<UNIX 环境编程>>读书笔记

2013-07-30 19:07 260 查看
1 shell程序就是位于应用软件与系统调用之间的程序
每个用户登录系统,系统就会为用户分配shell (用户的登录的口令文件 在 /etc/passwd
2 ls filename 运行原理
敲入命令传入main函数参数
根据argv[1]创建一个指向DIR的目录文件指针,并根据argv[1]创建目录
在从该目录文件读取文件,返回一个指向struct_dirent类型的指针
从而输出文件的名称
代码如下
#include <stdio.h>
#include <sys/types.h>

#include <dirent.h>

int main(int argc, char* argv[]){

DIR *dp;

struct dirent *dirp;

if(argc != 2) {

printf("usage: ls directory_name");

exit(0);

}

if((dp = opendir(argv[1]))==NULL){

printf("can't open %s", argv[1]);

exit(0);

}

else {

while((dirp=readdir(dp)) != NULL )

printf("%s\n", dirp->d_name);

}

closedir(dp);

return 0;

}

3 进程ID

getpid(), getppid()

4 fork() 创建一个进程,返回值有两个,返回给父进程的是被创建进程的PID,返回给被创建的进程为0

例子从标准输入读取命令并执行

#include <sys/wait.h>

#include <stdio.h>

#include <string.h>

#include <unistd.h>

int main(void){

char buf[256];

pid_t pid;

int status;

printf("%% ");

while(fgets(buf, 256, stdin) != 0){

if(buf[strlen(buf)-1] == '\n')

buf[strlen(buf)-1]=0;

if((pid=fork()) <0) {

printf("fork error");

}

else if(pid==0){

execlp(buf, buf, (char*)0);

exit(0);

}

if((pid=waitpid(pid, &status, 0))<0)

printf("waitpid error");

printf("%% ");

}

return 0;

}

调用execlp以执行从标准输入读入的命令,这就用新的程序文件替换了子进程原先执行执行的程序文件,

子进程调用execlp执行新程序文件,而父进程希望等待子进程终止,这一要求由调用watipid实现,其参数指定为要等等待进程的pid

5 线程ID 只在该线程所属的进程中有效

6 信号:是通知进程已发生某种情况的一种技术

进程处理信号的选择

1 忽略该信号

2 按系统默认方式处理

3 提供一个函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: