UNIX文件基础:I/O操作、进程控制与错误处理详解

需积分: 9 0 下载量 5 浏览量 更新于2024-07-24 收藏 905KB PDF 举报
本资源是一份关于UNIX系统文件基础的学习资料,涵盖了多个关键主题,包括文件描述符、标准输入输出、文件I/O与标准I/O操作、程序和进程、出错处理以及用户标识。以下是对这些知识点的详细解读: 1. **文件描述符**: 文件描述符是UNIX/Linux系统中用于标识一个进程与特定文件或资源(如socket和pipe)关联的整数。它是顺序分配的非负值,内核通过它跟踪进程对文件的访问。0, 1, 和 2通常分别代表标准输入、标准输出和标准错误。 2. **标准输入输出和标准出错**: 标准I/O是预定义的文件描述符,shell会自动将其连接到终端设备,允许进程通过这些描述符进行交互。标准输入(stdin, 0)、标准输出(stdout, 1)和标准错误(stderr, 2)是编程中的常用流。 3. **文件I/O与标准I/O**: - **文件I/O**:通过文件描述符进行操作,如`open()`打开文件,`read()`和`write()`读写数据,`lseek()`定位文件指针,`close()`关闭文件。这些是操作系统级的接口。 - **标准I/O**:通过`FILE *`结构体进行操作,如`printf()`和`fprintf()`进行格式化输出,`fopen()`打开文件,`fread()`和`fwrite()`读写二进制数据等。这些是C语言标准库提供的高级接口,通常在用户空间使用。 4. **程序与进程**: - **程序**:静态的可执行文件,通过`exec()`函数家族启动新的进程。 - **进程**:程序的运行实例,有唯一的进程标识符(pid)和父进程标识符(ppid),可以通过`fork()`创建子进程,`exec()`替换进程内容,`wait()`和`waitpid()`等待子进程结束。 5. **出错处理**: - **全局错误码errno**:系统错误信息的统一存储,错误值以"EXXX"形式表示,如EACCESS表示无权限访问。 - **错误处理规则**:仅在发生错误时检查errno,且函数不会清零它,所有非零值都对应于预定义的错误常量。 - **错误信息输出**:`strerror()`返回对应errno的字符串描述,`perror()`提供包含错误信息和errno值的用户友好的输出。 6. **用户标识**: - **用户ID (uid)**:区分不同用户,存储在/etc/passwd文件中,`getuid()`函数用于获取当前用户uid,文件权限与uid相关。 - **组ID (gid)**:用户组织管理,存储在/etc/group中,与用户关联的gid也影响文件权限。 - **实际用户ID和有效用户ID**:进程控制中涉及的概念,可能与用户实际权限不同。 7. **系统调用与库函数**: - **系统调用**:用户进程与内核通信的关键接口,提供了操作系统级别的功能,提高了安全性和移植性。 这份资料深入浅出地介绍了UNIX/Linux系统中的基础文件操作、进程管理、错误处理和用户权限管理,对于理解和编写UNIX/Linux环境下的程序至关重要。