• Unix的一些基础知识


    1.文件系统

        U N I X 文件系统是目录和文件的一种层次安排,目录的起点称为根 ( r o o t ),其名字是一个字符 /。

        目录( directory)是一个包含目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性是:文件类型,文件长度,文件所有者,文件的许可权(例如,其他用户能否能访问该文件),文件最后的修改时间等。 stat和fstat函数返回一个包含所有文件属性的信息结构。不能出现在文件名中的字符只有两个,斜线 (/)和空操作符( null)。
    下面的程序是ls(1)的主要实现部分:
     1 #include<sys/types.h>
     2 #include<dirent.h>
     3 
     4 int main(int argc,char **argv[])
     5 {
     6    DIR* dp;
     7    struct dirent* dirp;
     8 
     9    if(argc != 2)
    10    {
    11      printf("the directory is need!!");
    12      exit(1);
    13    }
    14 
    15    if((dp = opendir(argv[1])) == null)
    16    {
    17     perror("can't open directory!");
    18     exit(1);
    19    }
    20 
    21    while((dirp = readdir(dp)) != null)
    22        printf("%s \n",dirp->d_name);
    23 
    24    closedir(dp);
    25 
    26    return 0;
    27 }

     2.不带缓冲的IO和带缓冲I/O

       函数 open、read 、write、lseek以及close提供了不用缓存的I/O 。这些函数都用文件描述符进行工作,在之后我会详细介绍。相对的带缓冲的I/O就是fgetc,putc之类的,之后也会详细地介绍。

     3.进程控制

       有三种进行进程控制的函数,分别是fork,exec,waitpid(exec有六种变体,其实就是参数的不同),一般fork完之后子进程就会调用exec来运行新的程序,然后用waitpid来等待子进程结束并获取信息,也可以用来清理僵尸进程。如下程序演示了使用方法:

     1 #include <sys/types.h>
     2 #include <sys/wait.h>
     3 int main(int argc,char **argv[])
     4 {
     5   char buf[MAXLINE];
     6   pid_t pid;
     7   int status;
     8   
     9   printf("%%%");
    10   while(fgets(buf,MAXLINE,stdin) != null)
    11   {
    12     buf[strlen(buf) - 1= 0;
    13     if((pid = fork()) < 0)
    14        perror("fork error");
    15      else if(pid == 0)    //child
    16      {
    17       execlp(buf,buf,(char*)0);
    18       perror("couldn't execute new program!");
    19       exit(127);
    20      }
    21 
    22     if((pid = waitpid(pid,&status,0)) < 0)
    23          perror("waitpid error!!");
    24     printf("%%%");
    25   }
    26   return 0;
    27 }

     4.出错处理

      当UNIX函数出错时,往常返回一个负值,而且整型变量 errno通常设置为具有特定信息的一个值。例如,open函数如成功执行则返回一个非负文件描述符,如出错则返回- 1。在open出错时,有大约 15种不同的 errno值(文件不存在,许可权问题等 )。某些函数并不返回负值而是使用另一种约定。例如,返回一个指向对象的指针的大多数函数,在出错时,将返回一个null指针。 

      对于errno应当知道两条规则。第一条规则是:如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。第二条是:任一函数都不会将errno值设置为 0,在<errno.h>中定义的所有常数都不为 0。

     C标准定义了两个函数来打印出错信息: strerror(int errornum)(将errornum映射为一个出错信息字符串);   perror(const char *msg);(在msg之后输出error对应的出错信息)

     5.信号

     信号是通知进程已经发生某种条件的技术。进程如何处理信号一般有3种:1忽略。2按照默认方式处理。3自己定义处理函数,利用signal函数就可以自己改变信号的处理方式,他接收两个参数,第一个是具体的信号类型,第二个就是自己定义的函数名。

    暂时就说这么多,上面说的都比较片面,以后会一一详细介绍。


  • 相关阅读:
    DotNet 获取所有 SQL Server 的数据库实例名称
    SQL Server 2008 R2 导出数据脚本的方法
    使用 Jquery 获取 Internet Explorer 浏览器版本
    OpenCV(EmguCV)2.1新特性介绍之图像差异StereoSGBM与设置窗口属性SetWindowProperty(StereoSGBM Of OpenCV 2.1)
    OpenCV(EmguCV)2.1新特性介绍之图像分割GrabCut(GrabCut Of OpenCV 2.1)
    背景建模与前景检测之三(Background Generation And Foreground Detection Phase 3)
    使用Lingobit Localizer汉化.net程序(Translate .net program using Lingobit Localizer)
    返修&售后服务管理网站设计与源码
    解决Windows7无法安装SP1补丁包及无法显示Windows功能列表的方法
    javascript获取到textarea文本框中的回车换行符
  • 原文地址:https://www.cnblogs.com/juncent/p/1992145.html
Copyright © 2020-2023  润新知