UNIX基础知识--<>读书笔记

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 提供一个函数

 

你可能感兴趣的:(unix)