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 提供一个函数
每个用户登录系统,系统就会为用户分配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 提供一个函数
相关文章推荐
- UNIX基础知识--<<UNIX 环境编程>>读书笔记
- <<UNIX环境高级编程>>学习总结——第一章:UNIX基础知识
- Unix环境高级编程——Unix基础知识
- <<UNIX环境高级编程>>之第五章理解
- Java编程基础知识复习:变量与数据类型<数据类型初阶>
- Unix环境高级编程:1-2 基础知识、标准化
- <<UNIX环境高级编程>>之第四章理解
- unix环境高级编程基础知识之第一篇
- apue<<UNIX环境高级编程>>翻译错误罗列
- UNIX环境高级编程 第1章 UNIX基础知识
- Linux的那些事儿(3)----Linux环境下编程之UNIX基础知识
- UNIX环境高级编程——UNIX基础知识
- <<UNIX环境高级编程>>之第九章理解
- UNIX环境高级编程-01 UNIX基础知识
- UNIX环境高级编程——UNIX基础知识
- Unix环境高级编程——第一章-UNIX基础知识
- UNIX环境高级编程——UNIX基础知识
- <<UNIX环境高级编程>>学习笔记之环境搭建
- <<UNIX环境高级编程>>之第六章理解
- Unix环境高级编程 学习笔记_1_Unix 基础知识