zoukankan      html  css  js  c++  java
  • 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函数就可以自己改变信号的处理方式,他接收两个参数,第一个是具体的信号类型,第二个就是自己定义的函数名。

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


  • 相关阅读:
    Quartz.Net 作业调度后台管理系统,基于Extjs
    [备份]EntityFramework
    WebMisSharp升级说明,最新版本1.6.0
    AllPay(欧付宝)支付接口集成
    Paypal Rest Api自定义物流地址(跳过填写物流地址)
    根据IP获取国家
    ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?
    Extjs4 DateTimeField,日期时间控件完美版
    IOS Swift 训练
    .Net集成PayPal的Demo
  • 原文地址:https://www.cnblogs.com/juncent/p/1992145.html
Copyright © 2011-2022 走看看