POSIX:可移植性操作系统接口,是一种关于信息技术的IEEE 标准

               :包括 系统应用程序接口(简称 API),实时扩展[C 语言]

        目的:定义了标准的基于 UNIX 操作系统的系统接口 ,环境来支持源代码级的可移植性

语言规范:

      访问核心服务的编程语言的标准接口

     一个特殊语言服务的标准接口

该标准:

     陈述的范围和一系列标准参考,定义和总概念,各种接口设备,数据交换格式

该标准的目的:

      面向应用

       定义接口,而不是它的具体实现

       涉及资源和可移植性,而非对象

       基于 c 语言

     无超级用户,无系统管理

      最小限度的接口,最小限度的定义

      应用领域广泛

     对以前的实现进行最小限度改变

     对原有程序代码做最小的修改

     实时扩展

概述

   定义范围的关键要素:

        定义足够的一套功能适用于实时应用程序领域的重要部分

       定义足够的实现规范和性能相关的函数,以便允许实时应用程序完成系统的确定性的响应

   一致性:

         系统须支持标准中定义的接口,系统能够提供标准中没有要求到的函数和工具

         所有遵循标准的应用程序都使用基于 c 语言的服务

术语和基本需求

      定义:

        术语:

             一致性文档,被定义的实现,可能性,无用的特性

            通用名词:绝对路径,存取模式,地址空间,适当权限,定时器,异步 I/O 操作,后台进程,后台进程组,块文件,阻塞进程

        基本概念:

              扩展安全控制;文件存取允许;文件级别;文件名可移植性;路径名的决定;

        错误号:

            大部分函数都在外部变量 errno 中提供了错误号

extern int errno;

         简单系统的数据类型:

// /usr/include/x86_64-linux-gnu/sys
#include <sys/types.h>

//设备号
#ifndef __dev_t_defined
    typedef __dev_t dev_t;
    # define __dev_t_defined
#endif

//进程标识符
#ifndef __gid_t_defined
    typedef __gid_t gid_t;
    # define __gid_t_defined
#endif

//文件序列号
#ifndef __ino_t_defined
    # ifndef __USE_FILE_OFFSET64
        typedef __ino_t ino_t;
    # else
        typedef __ino64_t ino_t;
    # endif

    # define __ino_t_defined
#endif

//连接内容
#ifndef __nlink_t_defined
    typedef __nlink_t nlink_t;
    # define __nlink_t_defined
#endif

//文件大小
#ifndef __off_t_defined
    # ifndef __USE_FILE_OFFSET64
        typedef __off_t off_t;
    # else
        typedef __off64_t off_t;
    # endif

    # define __off_t_defined
#endif
#if defined __USE_LARGEFILE64 && !defined __off64_t_defined
    typedef __off64_t off64_t;
    # define __off64_t_defined
#endif

//进程或进程组标志符
#ifndef __pid_t_defined
    typedef __pid_t pid_t;
    # define __pid_t_defined
#endif

//返回字节数和错误标志的函数
#ifndef __ssize_t_defined
    typedef __ssize_t ssize_t;
    # define __ssize_t_defined
#endif

//用户标志符
#ifndef __uid_t_defined
    typedef __uid_t uid_t;
    # define __uid_t_defined
#endif

       环境描述:

          当一个进程开始执行时,将调用一个表示环境的字符串数组

extern char **environ;

进程原语

   进程的创建和执行

         进程创建

#include <sys/types.h>

//创建一个新的进程
pid_t fork(void);

         执行一个文件

/*
 * 用一个新的进程映像替代了当前的进程映像
 * 新进程映像文件: 新的进程映像创建于一个规则的,可执行文件
 * 成功无返回值
 *    因为调用进程映像,被新的进程映像 覆盖
 */
int execl(const char *path, const char *arg, ...);
int execv(const char *path, const *char argv[]);
int execle(const char *path, const char *arg, ...);
int execve(const char *path, const *char argv[], char *const envp[]);
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);

进程的终止

    进程的终止:

          从 main()函数返回时或者执行 exit()或_exit()函数时正常的终止

          被 abort()函数请求或者接受到一些信号时不正常的终止

   等待进程终止:

#include <sys/types.h>
#include <sys/wait.h>

/*
 *调用进程获得它的一个子进程的状态信息
 *Wait: 将挂起调用进程直到获得了它的子进程的状态信息 或直到获得一个终止进程信号
 *pid=- 1 并options = 0,wait 与 waitpid功能相同
 *  否则功能由 pid 和 options 的值而改变
 */
pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid, int *stat_loc, int options);

     终止一个进程

//终止一个调用进程,不返回
void _exit(int status);