《精通Unix下C语言编程与项目实践》读书笔记(17)

简介:

第2回 虚拟机中装机器,晕到死(Win)上连尤妮(Unix)(十七)
作者:朱云翔,胡平(朱朱胡工作室)

 
开始编程了!但是至少需要一台Unix机器,至少需要知道Unix操作,别急,现在就来装机器。
安装Unix就像结婚一样,都需要准备新房(计算机设备)。最方便的方法自然是安装一台独立的计算机也就是购置一套独立的房产,无拘无束,自由自在,但这要有一定的经济条件做支柱,比如你是机房房长,又比如正好天上掉电脑被你捡到了,否则你只能使用下一种方法:在现居房产中准备一室做新房之用。
古老的同居方法是双(多)启动,也就是在你使用的电脑中挤出一个容量至少为10G的硬盘分区,作为Unix的容身之所。
是不是已经有人磨刀霍霍准备折腾自己的计算机了,准备拼命的移出一个分区的空间。不过呢,删除文件是一件难以取舍的工作,移动文件是一件漫长的过程,确保不破坏原系统划分新分区是一件小心翼翼的工艺,最关键的是,使用双启动系统是一件极不方便的事情,总之这样学习Unix编程是一件十分郁闷的选择。
2.1 虚拟机Vmware
虚拟机的出现使你不再郁闷。
虚拟技术是目前网络上最最火爆的词语,广义的虚拟技术包含很多内容,可以实现很多功能,但是本处我们只需要知道虚拟技术可以让你的一台计算机无中生有为两台计算机,解决Unix安装设备的燃眉之急就可以了,即:
最通俗的说法:虚拟机可以使你的一台计算机同时虚拟为两台、三台、若干台,只要资源允许,虚拟数量理论上没有上限。
最商人的说法:虚拟机最诱惑人的地方是你只要贡献一点点的硬盘,就可以拥有一台功能齐全的计算机,它将不等价交换的思想发挥的淋漓尽致。
最魔幻的说法:运行虚拟机,就好象你在家里搭了几个小帐篷,但你走进去一看,哇塞,这哪里还是原来的帐篷,明明是一间独立别墅。
最佛教的说法:虚拟机虽然只占用硬盘的一小块空间,但这一小块空间中却隐藏了另一台计算机,所谓一粒沙成三千世界就是这个道理。
编程浪子的说法:虚拟机是机器缺乏者——尤其是在校大学生——学习Unix的福音,所以本课堂建议有条件者使用单独计算机,无条件者使用虚拟机,强烈不建议双启动。
传说中的虚拟机软件有很多,本课堂推荐使用VMware Workstation,它目前的最新版本是VMware Workstation 6.5,成功安装后的界面如图2-1所示:
image001 2-1 VMware Workstation 主界面
 
 
2.2 安装Sco OpenServer 5
选择在PC机上学习Unix相当的无奈,因为要找一个可以运行在X86CPU上的Unix版本真的是太难了,著名的AIXHP-UX都不屑与PC为伍,于是很多老师和同学只好草草的选择一个Linux版本代替,君不见很多APUE课堂上机时清一色的Linux开发环境。
其实你完全不必这样无奈,X86机这一块蛋糕还是有Unix在虎视眈眈的,比如著名的solaris就没有CPU歧视,她的某些版本就可以运行在PC上。又比如今天的主角SCO OpenServer,就是完全为X86而生的哦,并且耗费资源相当的少,给个32M内存就能跑到飞快,这让很给很多内存不足的家庭带来了希望,不愧为学习Unix的必备良药!
2.2.1 配置虚拟机
那么让我们动起来吧,正式开始神奇的Unix之旅!首先是配置虚拟机:
第一步,安装VWmare,并准备Sco OpenServer 5.0.55.0.7
第二步,运行VWmare,在图2-1中点击“新建虚拟机”,出现“新建虚拟机”向导,如图2-2所示:
image003 2-2 VMware 新建虚拟机向导
第三步,在图2-2中点击“下一步”,出现“选择合适的配置”向导,如图2-3所示:
  image005
2-3 VMware 新建虚拟机配置
第四步,如果选择“典型”,则自动生成通用配置的虚拟机,否则由你自己选择机器配置,这里选择“自定义”,点击“下一步”,进入“虚拟机硬件兼容性”页面,如图2-4所示:
image007
2-4 VMware 新建虚拟机硬件兼容性
第五步,在图2-4中无需更改,直接点击下一步,进入“客户机操作系统选择”页面,如图2-5所示:
image009
2-5 VMware 新建虚拟机操作系统选择
第六步,在图2-4中,“客户机操作系统”项目选择“其他(O)”,然后版本选择“Other”,如图2-6所示:
image011
2-6 VMware 新建虚拟机操作系统选择
第七步,点击“下一步”,进入“虚拟机名称”页面,如图2-7所示:
image013
2-7 VMware 新建虚拟机名称
第八步,输入合适的虚拟机名称(可以任意输入自己喜欢的名称),选择正确的位置(至少要有1G的空间,最好不在系统盘),点击“下一步”,进入“虚拟处理器数量”页面,如图2-8所示:
image015
2-8 VMware 新建虚拟机处理器配置
第九步,选择一个处理器,即使真有两个CPU或者双核CPU也不要选择“两个”,因为SCO中支持多处理器服务是需要额外收费的,点击“下一步”,进入“虚拟机内存”页面,如图2-9所示:
image017
2-9 VMware 新建虚拟机内存
第九步,自行设置虚拟机的内存大小,建议设置为64M,如果内存吃紧可以设置32M,反之如果内存富足,设置个256M就足够了。点击“下一步”,进入“网络设置”页面,如图2-10所示:
image019
2-10 VMware 新建虚拟机网络类型
第十步,配置虚拟机与主机之间的网络连接。在“使用网桥连接”中,虚拟了完全与主机独立的网络,比如假设主机IP192.168.18.127,连接因特网的网关地址为192.168.18.1,则将虚拟机IP设置为192.168.18.128,网关地址也设置为192.168.18.1,那么虚拟机将可以直接接入因特网,主机或其他计算机可通过IP地址192.168.18.128访问虚拟机,反之虚拟机可以通过IP地址192.168.18.127访问主机。此时使用虚拟网络VMnet0,如图2-11所示:
image021
2-11 VMware 虚拟网络
在“使用网络地址翻译”中,虚拟机将使用主机IP地方访问外部网络。
在“使用Host-only网络”中,虚拟了一个包括了主机和虚拟机的局域网,使用虚拟网络VMnet1描述。比如虚拟网络VMent1对应“本地连接2”(如图2-12所示),而“本地连接2”中IP地址为“10.10.10.1”,则可设置虚拟机地址为“10.10.10.128”,那么此两IP地址就分别表示了虚拟局域网中主机的IP地址和虚拟机的IP地址,主机可通过IP地址10.10.10.128访问虚拟机,反之虚拟机可以通过IP地址10.10.10.1访问主机,但是其他计算机均不能通过此IP地址访问主机或虚拟机。
image023
2-12 VMware 虚拟网络映射
一般情况下,如果希望虚拟机访问外部网络或计算机,则选择“使用网桥连接”,如果虚拟机仅与主机通信,则选择““使用Host-only网络”。网络类型在创建虚拟机后仍然可以修改,本处选择后者。进入“选择I/O适配器类型”页面,如图2-13所示:
image025
2-13 VMware 新建虚拟机选择I/o适配器类型
第十一步,在“选择I/O适配器类型”页面中,使用默认选项,点击“下一步”,进入“选择硬盘”页面,如图
image027
2-14 VMware 新建虚拟机选择硬盘
第十二步,为了方便起见,选择“创建一个新的虚拟磁盘”,一般不建议使用物理磁盘。点击“下一步”,进入“选择硬盘类型”页面,如图2-15所示:
image029
2-15 VMware 新建虚拟机硬盘类型
第十三步,SCO就是用IDE硬盘吧,否则在安装SCO操作系统之前要求先安装SCSI的驱动,相当地麻烦。点击“下一步”,进入“指定磁盘容量”页面,如图2-16所示:
image031
2-16 VMware 新建虚拟机硬盘容量
第十四步,指定硬盘大小为40G。不用担心硬盘大小不够,只要不选择“立即分配所有磁盘空间”,虚拟机硬盘是实际用多少就分配多少。比如虚拟机中40G硬盘只使用了2G,那么主机中分配给虚拟机硬盘的实际大小将是稍大于2G。如果主机硬盘格式为FAT32,选择“分割磁盘为2GB文件”。点击“下一步”,进入“指定磁盘文件”页面,如图2-17所示:
image033
2-17 VMware 新建虚拟机硬盘文件
第十五步,输入虚拟机硬盘在主机中的文件名,点击“完成”,结束“新建虚拟机向导”,虚拟机建立完毕,进入虚拟机信息页面,如图2-18所示:
image035
2-18 虚拟机信息页面
第十六步,如果对虚拟机的配置不满意,或者选择“典型”创建的虚拟机,可在此页面中更新配置。
第十七步,点击“编辑”菜单项下“参数”子项,选择“热键”标签,进入“组合键”页面,如图2-19所示:
image037
2-19 虚拟机热键标签
选择“Ctrl+Shift+Alt”,确定。
本处设置的键就是将你从虚拟机中跳出到主机来,但是“Ctrl+Shift”本身是Unix/Linux下一个很重要的切换键,如不修改将很容易操作冲突,使得Unix/Linux不能在字符终端和图形终端之间自由切换。
 
ps:
1、本章写的很郁闷,因为老是要截图,感觉没有太多技术含量。
2、图片太多不好发布,最后只好整合成14个图片发布了,这样我就只要上送14个图就可以了。
3、图片的分辨率比较高,看不清楚的可以点击看大图。
4、好久没有发博文,居然不会发了。博文老是发布不上去,总是报错,开始用文字的方式发布过一次,搞的呜呼哀哉,最后提示无法显示,郁闷中。而且也不能修改。细心的读者可以发现,连续三篇文章的“下一篇”链接都没有,不是没有修改,而是每次修改都提示无法显示,
5、下一节有更多的图,继续用本方式发布。
 
 
 





 本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/184218,如需转载请自行联系原作者

相关文章
|
2月前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
342 12
|
2月前
|
算法 Unix 数据安全/隐私保护
Python编程--UNIX口令破解机
Python编程--UNIX口令破解机
27 1
|
3月前
|
存储 算法 Linux
C语言 多进程编程(一)进程创建
本文详细介绍了Linux系统中的进程管理。首先,文章解释了进程的概念及其特点,强调了进程作为操作系统中独立可调度实体的重要性。文章还深入讲解了Linux下的进程管理,包括如何获取进程ID、进程地址空间、虚拟地址与物理地址的区别,以及进程状态管理和优先级设置等内容。此外,还介绍了常用进程管理命令如`ps`、`top`、`pstree`和`kill`的使用方法。最后,文章讨论了进程的创建、退出和等待机制,并展示了如何通过`fork()`、`exec`家族函数以及`wait()`和`waitpid()`函数来管理和控制进程。此外,还介绍了守护进程的创建方法。
C语言 多进程编程(一)进程创建
|
3月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
3月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
3月前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
3月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
3月前
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
3月前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
3月前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。