unix高级环境编程-基础知识

时间:2021-09-07 22:14:01

  对于一个从C#转向Linux/unix系统开发的菜鸟,中间无数次的焦头烂额只有自己心理明白,所幸我没有在大风大浪中凋零破碎,依然坚挺着我的学习之路。

  Unix操作系统结构:

  UNIX ,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的贝尔实验室开发。

   严格意义上讲,可将操作系统定义为一种软件,可以直接控制硬件资源,提供程序运行环境,我们可以称之为内核。内核的接口可以称为系统调用,公用函数库建立在系统调用之上,应用软件既可以使用公用函数库也可以使用系统调用。shell是一种特殊的应用程序,它为运行其他应用程序提供接口。

   广义上讲,操作系统也包括内核和其他的一些软件。

 文件系统和目录

 文件系统:

   Unix文件系统是目录和文件组成的一种层次结构,目录的起点称为根(root) 使用./符号表示,目录(directory)是一个包含许多目录项的文件,逻辑上讲,可以认为i每一个目录都包含一个文件名,同时还包括文件的属性信息。文件的属性是指文件类型,文件大小,文件所有者,文件权限 以及文件最后修改时间。

 文件名:目录中各个名字称为文件名,斜线和空操作符不能出现在文件名中,在创建新的目录时候,系统会自动创建2个文件名 .和..

 路径名:一个或多个以斜线分割的文件名序列构成路径名,以斜线开头的称为绝对路径,否则称为相对路径

 18 #include <dirent.h>
 19 int main(int argc,char** argv)
 20 {  
 21      DIR   *dp;
 22      struct dirent *dirp;
 23     if(argc != 2)
 24     {
 25         err_quit("usage:is directory_name");
 26     }
 27     if(dp = opendir(argv[1] == NULL)
 28         err_sys("can`t open %s ",argv[1]);
 29     while((dirp = readdir(dp))!= NULL)
 30         printf("%s\n",dirp->d_namlen);
 31    
 32     closedir(dp);
 33     exit(0);
 34 }

 

工作目录:

  Unix下每一个进程都有一个工作目录,或者可以称为当前工作目录,所有的相对路径都是从工作目录开始的。


输入和输出

    标准输入,标准输出和标准出错,所有的shell都会为每一个新运行的进程打开三个文件描述,大多数shell都提供一种方式,使其中任何一个或者三个,例如:ls -> file.list 执行命令后,标准输出重新定向到file.list中

不用缓存的IO  

  函数open,read,write,lseek以及close提供不用缓存的I/O,这些都使用文件描述

 

 #define BUFFSIZE 4096
 22           
 23 int main(void)
 24 {         
 25     int n;
 26     char buf[BUFFSIZE];
 27     while(n = read(STDOUT_FILENO,buf,BUFFSIZE) >0)
 28     {     
 29         if(write(STDIN_FILENO,buf,n) != n)
 30         {       
 31             err_sys("write err\n");
 32         }
 33         if(n < 0)
 34         {    
 35             err_sys("read_err\n");
 36         }
 37         exit(0);

 标准I/O

   标准I/O函数体on个一种对不用缓冲的额函数的带缓冲的接口,使用标准I/O函数可以无需担心如何选取最佳的缓冲区大小,使用标准I/O函数的另外一个优点是简化了对输入行的处理,如Fgets函数读取完整的一行,而read函数读取指定的字节,标准I/O函数库提供了使我们能够控制该库所使用的缓冲风格函数。

  

 18 #include <stdio.h>
 19 int main(void)
 20 {    
 21     int c;
 22     while(c =getc(stdin) != EOF)
 23     {                      
 24         if(putc(c,stdout) == EOF)
 25             err_sys("output error");
 26         if(ferror(stdin))
 27             err_sys("input error");
 28         eixt(0);
 29     }   
 30 }   

 函数getc一次读取一个字符,然后函数putc将此字符标准输出