unix系统是一个多用户系统,他允许很多用户很多程序同时工作,程序经常对文件,目录进行操作,对数据进行转换或传输。同一台机器上的不同程序之间,甚至不同机器上程序之间通过网络都可以通信。
登录-运行程序-注销
在登录过程中,当用户名和密码通过验证后,系统会启动一个叫shell的进程,然后把用户交给这个进程,由这个进程处理用户的请求。每个用户都有属于自己的shell进程。也说明了unix支持多用户的特点。
shell中有些常用的命令:比如who,ls等。
这些命令是如何实现的呢?
这些大都是一个个用c写的可执行程序。当你在shell环境里敲这个命令时,shell就会启动一个该命令的进程来执行。在unix中增加一个命令是很容易的事,把程序的可执行文件放到一下任意一个目录即可:/bin,/usr/bin,/usr/local/bin,这些目录里面存放着很多系统命令。
who命令可以查看系统的登录用户有那些,它又是如何实现的呢?
在系统里用一个utmp文件,专门用于记录用户的登录情况。who通过读文件来获得需要的信息,而每个登录的用户在文件中都有对应的记录。根据文件中的记录的数据结构,读取出相应的内容就行了。当一个文件已经被打开,是否允许再次打开呢?这种情况发生在有多个进程要同时访问一个文件的时候。Unix并不禁止一个文件同时被多个进程访问,如果禁止的话,那两个用户就无法同时使用who命令了。
如何对文件进行操作:如果文件被顺利打开,内核会返回一个正整数的值,这个数值就叫做文件描述符。必须通过文件描述符对文件进行操作。
同理,执行logout命令,就是打开utmp文件,从中找到包含你所在终端的登录记录对当前记录做修改。关闭文件。主要是如何把修改过的记录写回文件问题,可以调用系统函数lseek()使用文件指针找到相应位置,把修改过的内容从新写回,覆盖原来的即可。
为什么系统调用需要很多时间?
用户进程位于用户空间,内核位于系统空间,磁盘只能被内核直接访问。程序要读取磁盘上的数据只能通过系统调用read,而read的代码在内核中,所以当read调用发生时,执行权会从用户代码转移到内核代码,执行内核代码是需要时间的。系统调用的开销大不仅仅是因为要传输数据,当运行内核代码时,CPU工作在管理员(又称超级用户模式)模式,这对应于一些特殊的堆栈和内存环境,必须在系统调用发生时间建立好。系统调用结束后(read返回时),cpu要切换到用户模式,必须把堆栈和内存环境恢复成用户程序运行时的状态,这种运行环境的切换要消耗很多时间。
现在再来了解一下ls的工作原理:
每次使用ls时,会列出相应目录下的目录和文件名。我们首先了解目录是什么。目录是一种特殊的文件,他的内容是文件和目录的名字。从某种意义上说,目录文件与utmp文件很类似。他们都包含很多记录,每个记录的格式由统一的标准定义。与普通文件不同的是,目录文件的内容永远不为空,每个目录都都至少包含两个特殊的项--".","..",前者表示当前目录,后者表示上一级目录。目录是文件的列表,更确切的说,是记录的序列,每条记录对应一个文件或子目录,通过readdir读取目录中的记录即可,解析数据结构,打印出文件或目录名,这样就实现了ls命令,当然还要注意打印输出时的排版格式。
分享到:
相关推荐
Unix/Linux操作系统简介 GNU编译工具GCC GNU C 内存管理 文件I/O 进程管理 信号 进程间通信 多线程 网络通信
3. **文件系统和I/O**:UNIX系统的文件系统是其核心特性之一。书中深入讨论了文件描述符、缓冲I/O、非阻塞I/O和异步I/O,这些都是高效处理文件和设备的关键。 4. **内存管理**:在UNIX中,程序员可以直接管理内存,...
卷一:《Unix网络编程卷一:套接字联网API》 这本书主要围绕Unix系统的套接字接口进行讲解,套接字(Sockets)是Unix系统中实现进程间通信(IPC)的一种重要机制,也是网络通信的基础。书中详细阐述了以下核心知识点...
Linux作为UNIX的类UNIX系统,其网络编程原理和API在很大程度上与UNIX保持一致,因而这本书的内容对Linux开发者同样具有较高的参考价值。 内容提到了UNIX网络编程常用的两种API:套接口(sockets)和XTI(X/Open传输...
《Unix编程艺术》、《Unix环境高级编程(第二版)》和《Unix网络编程(第二版)》是三本在IT领域中具有深远影响力的经典著作,涵盖了Unix操作系统的核心概念、系统调用、进程管理、文件操作、网络通信等多个重要主题...
2. **套接字接口(Socket API)**:Unix网络编程的核心是套接字接口,它提供了一组用于进程间通信和网络通信的API。书中详细阐述了套接字的创建、绑定、监听、连接、发送和接收数据等操作,以及如何处理并发连接和多...
《UNIX网络编程》是计算机科学领域的一本经典著作,由W. Richard Stevens撰写,分为卷一和卷二,深入探讨了UNIX系统上的网络编程技术。这本书对于理解和掌握网络编程的基本概念、API以及实际应用有着极大的帮助。源...
在Unix系统中,网络编程的核心是套接字API,它提供了一种标准的、跨平台的方式来实现进程间的通信,特别是跨越网络的通信。书中的内容主要分为以下几个方面: 1. **网络基础**:首先介绍了网络的基本概念,如TCP/IP...
《Unix网络编程》一书是网络编程领域中的经典之作,分为卷一和卷二,分别深入探讨了套接字API和进程间通信等核心主题。对于任何想在Unix环境下进行网络编程的开发者来说,这两本书都是不可或缺的参考资料。然而,...
根据提供的标题“Unix编程艺术中文版(非加密,带目录)”及描述“Unix编程艺术中文版”,可以推测这是一本介绍Unix系统编程原理、技巧和最佳实践的书籍。本书可能涵盖Unix系统的背景知识、核心概念、编程工具和技术...
《Linux/UNIX系统编程手册》是一本权威的指南,涵盖了操作系统的核心编程接口,为开发者提供了深入理解操作系统底层机制的窗口。源码分析是学习这些概念的最直接方式,因为它们揭示了内核如何与应用程序交互。以下是...
《Unix网络编程》则专注于网络编程,包含以下核心内容: 1. 网络基础知识:TCP/IP协议族、OSI模型、端口与套接字概念的介绍。 2. 套接字API:讲解socket()、bind()、listen()、accept()、connect()、send()、recv...
《UNIX网络编程卷1》是网络编程领域的一本经典著作,由W. Richard Stevens撰写,主要探讨了在UNIX操作系统环境下如何进行网络通信。这本书详细介绍了socket接口,它是UNIX和其他类UNIX系统中实现网络通信的核心机制...
《Unix网络编程》是一本详尽介绍Unix环境下网络编程技术的经典书籍,书中包含了大量实用的代码示例,帮助读者深入理解网络编程的核心原理与实践技巧。本文将重点分析书中两个代表性案例:简单的时间获取客户端与...
《Unix网络编程卷一》是网络编程领域的一本经典著作,由W. Richard Stevens撰写,深入浅出地讲解了在Unix环境下进行网络通信的各种技术和原理。这本书主要涵盖了以下几个核心知识点: 1. **网络编程基础**:书中...
### UNIX网络编程卷2:进程间通信核心知识点详解 #### 一、进程间通信(IPC)概述 在《UNIX网络编程卷2》中,作者深入探讨了进程间通信(Interprocess Communication, IPC)这一主题。进程间通信是操作系统中一个...
在这部分,读者将了解到如何利用Unix系统提供的网络编程接口来实现网络应用,如TCP/IP协议栈的工作原理、套接字的创建与操作、数据的发送与接收、多路复用I/O(如select和poll)、异步I/O等核心概念。同时,书中还...
总的来说,《Unix高级编程》是一部全面且深入的教程,它可以帮助开发者提升对Unix/Linux系统的工作原理和编程实践的理解。通过阅读电子书并实践源码,读者可以逐步掌握Unix编程的核心技术,成为一名精通系统级编程的...
《Linux-UNIX系统编程手册(上册)》是由Linux编程专家Michael Kerrisk撰写的一部权威指南,详细介绍了Linux和UNIX系统的编程接口。这本书是针对那些希望掌握系统编程技能的开发者,无论是在Linux还是其他UNIX平台上...
《Unix网络编程》一书是网络编程领域中的经典之作,主要涵盖了网络通信的基本原理和Unix系统下的实现细节。这本书的第一卷通常关注于套接字(Sockets)接口,它是Unix和其他类Unix系统进行网络通信的主要手段。以下...