unix程序设计设计概念和编程标准的发展(第一部分)

1.unix基础知识

1)unix体系结构

   

2)shell->bash(所有的linux都支持),sh, csh, ksh, tcsh

3)unix文件系统是目录和文件的层次结构,文件系统的起点是根目录("/")。

     文件名的命名,不能包含斜线和空字符。最好只包含字母数字下划线。

     绝对路径,相对路径,工作路径(进程文件名所在的目录),起始目录(口令文件中记载的)。

     实例,ls命令的简单实现。

    

/*************************************************************************
 > File Name: a.c
 > Author: aben
 > Created Time: Sat 17 Mar 2018 10:10:45 PM PDT
 ************************************************************************/

#include<stdio.h>
#include<dirent.h>

int main(int argc, char* argv[])
{
    DIR *dir;
    struct dirent *dirp;
    if (argc != 2) {
        printf("useage:dirname \n");
    }   
    if ((dir = opendir(argv[1])) == NULL) {
        printf("useage:dirname \n");
    }   
    while ((dirp = readdir(dir)) != NULL) {
        printf("%s \n", dirp->d_name);
    }   
    closedir(dir);
    return 0;
}   

4)时间值

     日历时间。

     进程时间  (时钟时间,用户cpu时间,系统cpu时间),可通过time命令获得。

2.unix编程标准发展

1)目前世界上大概分为三种标准。如下,

     1. ISOC,International Origianization Standards C;

     2. POSIX, Portable Operating Syatem Interface;

     3. FIPS, 美国政府的一个标准;

     posix包含isoc, single uinx specification包含posix。

2)常用的标准实现。

    FreeBSD操作系统; Linux操作系统;Mac OS操作系统;Solaris操作系统;    

    这4种操作系统都提供uinx编程环境,基本符合posix编程标准,但是只有mac os和solaris称得上是unix操作系统。

3)限制

    例如一个进程能同时打开的标准IO流数目,文件名的最大长度等等。

    限制分为编译时限制和运行时限制,编译时限制为常量,运行时限制依赖于操作系统的运行状态,可有sysconf,pathconf,fpathconf等api获得。返回值为正数则为限制值,返回0表示不确定,返回-1表示参数错误。所以下方例子是不完美的例子。

/*************************************************************************
 > File Name: b.c
 > Author: aben
 > Created Time: Sat 17 Mar 2018 11:54:12 PM PDT                            
 ************************************************************************/

#include<stdio.h>
#include<unistd.h>

int main()
{
    //sysconf运用实例
    printf("exec函数的参数最大长度:%ld\n", sysconf(_SC_ARG_MAX));
    printf("每个实际用户的最大进程数:%ld \n", sysconf(_SC_CHILD_MAX));
    printf("每个进程最大打开文件数:%ld \n", sysconf(_SC_OPEN_MAX));
    //pathconf运用实例
    printf("相对路径名的最大字节数:%ld \n", pathconf("./", _PC_PATH_MAX));
    return 0;
}   

4)posix标准标准可选的接口和必选的接口。

      那么我们编程依赖的操作系统是否实现了这些接口呢?同样可以由   sysconf,pathconf,fpathconf等api获得。使用方法参考上方例子。

5)功能测试宏

     用于符号排他性定义。例如_POSIX_C_SOURCE,一旦定义了此常量,所有的的posix头文件都可以使用此常量来排除任何实现专有的定义。

5)基本数据类型

      全部以_t结尾,这些类型全是基本数据类型,但是为了程序的可移植性,通过typedef重定义以方便编程时无需考虑系统的变化。  












猜你喜欢

转载自blog.csdn.net/woaichanganba/article/details/79600097