Unix/Linux系统编程学习笔记第一章、第二章
知识点归纳以及最有收获的内容
- 一. 进程与线程
Unix/Linux系统中,进程是程序的执行实例,而线程是进程内的执行单元。进程之间通常是独立的,而线程共享进程的资源。最大的收获是理解了进程与线程之间的区别,以及它们如何协同工作。
进程(Process) - 1.什么是进程:
进程是一个正在运行的程序的实例。每个进程都有自己的内存空间,包括代码、数据和系统资源的副本。它们是操作系统中最基本的执行单元之一。 - 2.特点:
进程是独立的,它们之间不共享内存空间。
进程之间通常通过进程间通信(IPC)机制来进行通信,如管道、消息队列、共享内存等。
进程具有自己的独立地址空间,这意味着一个进程的崩溃不会影响其他进程。
进程的创建和销毁通常比较耗资源。 - 3.进程的创建:
进程可以通过系统调用(例如fork())来创建。fork()调用会复制当前进程,创建一个新的子进程,子进程将继承父进程的代码和数据,并继续执行。
进程的通信:
进程之间可以使用多种IPC机制来交换数据和通知事件。例如,管道用于在进程之间传递数据,消息队列用于异步通信,共享内存允许多个进程共享同一块内存等。
线程(Thread) - 1.什么是线程:
线程是进程内的执行单元。一个进程可以包含多个线程,它们共享同一进程的内存和资源。 - 2.特点:
线程是轻量级的,创建和销毁线程比进程更快。
线程之间共享相同的地址空间,可以更容易地进行数据共享和通信。
线程的崩溃可能会影响同一进程中的其他线程。 - 3.线程的创建:
线程可以通过线程库(例如pthread库)中的函数来创建。通常,一个进程在启动时会有一个主线程,然后可以通过库函数创建更多的线程。 - 4.线程的通信:
由于线程共享相同的地址空间,它们之间的通信通常更简单。但也需要小心使用线程同步机制(如互斥锁和信号量)来避免竞态条件和数据损坏。 - 总之,进程和线程都是在Unix/Linux系统编程中非常重要的概念。了解它们的特点、创建方式以及如何进行通信和同步是编写多任务应用程序的关键。不同的应用场景可能需要使用不同数量的进程和线程,具体取决于性能和安全性需求。
苏格拉底挑战
- 二、文件系统与I/O
文件系统(File System)
- 1.什么是文件系统:
文件系统是操作系统用来组织和管理文件和目录的一种机制。它提供了一种结构化的方式来存储、检索和操作数据。在Unix/Linux系统中,文件系统通常是一个树状结构,由目录(文件夹)和文件组成。
- 2.文件系统的特点:
文件系统为文件和目录提供了命名和位置信息。
它允许对文件进行创建、读取、写入、删除和更改权限。
文件系统支持文件的组织,例如目录结构,以便用户可以轻松查找和管理文件。
Unix/Linux系统中的文件系统通常是层次结构的,以根目录(/)为起点,通过路径来定位文件和目录。
- 3.文件和目录:
文件是数据的持久存储,可以包含文本、图像、程序等。
目录是一种特殊类型的文件,用于组织其他文件和子目录。
- 4.文件路径:
文件路径是用于唯一标识文件或目录位置的字符串。绝对路径从根目录开始,相对路径相对于当前工作目录。
I/O(输入/输出)
- 1.什么是I/O:
I/O是指计算机系统与外部世界之间的数据传输。它包括从磁盘读取文件、从键盘获取输入、向屏幕输出数据等操作。
标准I/O:
Unix/Linux系统提供了标准I/O流(stdin、stdout、stderr)来进行输入和输出。stdin用于输入,stdout用于标准输出,stderr用于错误输出。
文件I/O:
通过系统调用(如open()、read()、write()和close()),可以直接进行文件I/O。这些调用允许打开文件、读取数据、写入数据和关闭文件。
- 2.文件描述符:
文件描述符是一个整数,用于唯一标识打开的文件或I/O流。0表示stdin,1表示stdout,2表示stderr。
缓冲I/O和无缓冲I/O:
Unix/Linux系统支持缓冲I/O和无缓冲I/O。缓冲I/O将数据存储在缓冲区中,以提高性能,而无缓冲I/O直接将数据传输到设备。
文件权限和I/O:
Unix/Linux系统的文件系统具有强大的文件权限机制,它影响谁可以执行I/O操作。文件权限由文件的所有者、组和其他用户来控制。
文件系统与I/O是Unix/Linux系统编程中的核心概念,对于开发应用程序、操作文件和处理数据至关重要。深入理解文件系统的组织方式和I/O操作的执行方式将有助于编写高效、可靠的应用程序。
苏格拉底挑战
问题与解决思路
- 如何打开虚拟机的命令行
- Linux下创建用户的命令是什么
实践过程截图
- 建立自己的虚拟机
2.学习ls,pwd,cd三个基本命令
1.pwd
为print working directory 表示执行这个命令
/home/wjc为当前路径保存地址
2.ls
为list列出当前路径所有文件
3.cd
为打开目录的地址
- 需要修改语言才能打出中文
终端中输入sudo apt-get istall ibus-pinyin
ibus-setup设置输入法
关于ls
的其他用法
ls -l
表示以长格式显示
ls -a
显示所有的目录和文件
ls-l-a
同时使用也可ls-l-h
将列表以kb为单位以列表形式打开
关于cd的一些用法
cd ..
返回上级目录
cd
文件名/子文件名打开该地址下的子文件
cd
加一部分文件名后加Tab键可以自动补全目录,但需要有唯一相似的目录- 上键可以取得历史的命令
- clear清空屏幕 cd ~返回主目录有时两者同时使用