本章概述了系统编程的全貌,并介绍了 Unix 的基本背景信息。我们首先会探讨什么是系统程序,以及它们与其他类型的程序有何不同。接下来,我将介绍 Unix 操作系统家族的许多基本概念,最后简要讨论 Unix 和 C 编程语言的历史和标准化。
在探讨构成 Unix 的各种概念时,我们首先会探讨内核,因为它本质上是 Unix 系统的核心。之后,我们会讨论 Unix Shell,它是 Unix 系统中可编程、可交互的用户界面,与 Unix 内核相互独立且截然不同。之后,我们将介绍用户和组的概念。然后,我会解释 Unix 中特权指令和非特权指令的区别,是如何使内核能够安全高效地管理资源的。接下来,我将介绍用户进程的概念(它表示由内核管理的正在运行的用户程序)以及线程,它们是 Unix 中一种特殊的进程类型。我还将解释环境列表的概念,它是传递给新进程的一组变量和值。此外,我还将描述 Unix 目录层次结构,并概述文件、目录和权限。
任何 Unix 系统的一个重要部分是其在线文档,它在本书中学习系统编程的过程中起着至关重要的作用。我们还将在本章介绍它的组织和使用方法。
人们学习编写的第一个程序都很简单,但尽管它们很简单,我们仍然可以用它们来解释什么是系统编程。最简单的、真正执行操作的程序没有输入,只是在屏幕上打印一条消息。其中一个程序就是随处可见的“Hello, World”程序,你很可能在作为程序员的开发生涯之初就编写过它。
#include
void main()
{
printf("hello, world.n");
}
第一行是一个 include 指令,以关键字 #include 开头,后跟一个文件说明。它告诉 C 预处理器在程序的该位置读取文件(在本例中为 C 头文件 stdio.h)的内容。我们需要执行该操作,因为主程序会调用 C 函数 printf(),该函数的声明位于 stdio.h 中。如果没有它,编译器就无法判断 printf() 是否被正确调用。C 预处理器必须先找到头文件才能读取它,而头文件可能位于许多可能的位置。文件名周围的尖括号 () 告诉预处理器它位于它搜索的标准位置之一。
printf() 函数是 C 语言中在屏幕上打印信息的一种方式。我使用“屏幕”一词作为更专业的术语“终端窗口”的同义词。在这个简单的例子中,printf() 的参数是一个字符串“hello, world.n”。n 是换行符,它会使它后面的字符出现在屏幕上下一行的开头。
# gcc -o hello_world hello_world.c
# ./hello_world
hello, world.
C 语言为我们提供了一个非常强大的工具 printf(),让我们无需学习太多终端和其他技术知识,就能编写将内容打印到屏幕上的程序。
让我们更进一步。上面的程序输出文本,但没有输入。下例同时执行输入和输出。
#include
#include
#include
int main()
{
char name[256];
printf("Enter your name: ");
scanf("%255s", name);
printf("hello %sn", name);
}
该程序首先声明一个名为 username 的字符数组,长度为 256。该数组最多可存储 255 个字符,外加一个终止符 NULL 字节。NULL 字节是代码为零的非打印字符。作为字符,它写为
参与评论
手机查看
返回顶部