Windows与Unix思想
Unix与Windows的思想
- Unix中的哲学是“一切皆文件”,这里的一切皆文件是一个广泛的概念,有一些特殊的设备文件,在/dev目录下
- 物理设备在Unix中就对应一个特殊的设备文件,比如打印机就是/dev/lp0,这个设备文件直接与物理设备的串行端口连接,只要向这个设备文件中传入数据,就可以调用打印机。
- 而没有与物理设备直接连接的特殊的设备文件,称之为伪设备文件。伪设备文件一般都是成对出现的,就像是打电话一样,通过这种逻辑关系就可以实现与物理设备一样的功能,比如在伪设备的一端发送一串字符串,在另一端就会就收到这个字符串,另一端可能的操作就是将这个字符串原样返回,或者对其进行加密再返回,在或者将其传送到/dev/lp0设备文件中调用打印机打印文件。
- 在Unix中命令行中的字符都将会被转换成为文件序列(文件流),这样才能够实现“一切皆文件”的思想,任何东西都可以被抽象成文件流。
- 在Unix中,要使用命令行,先启动一个终端,接着启动一个shell,shell和终端通过pty伪终端设备通信,也就是在mac下,我们鼠标点击terminal这个终端应用程序,在进入到终端的程序之后,会默认启动一个shell,但是在Windows中却是用户只能启动命令行程序,而不能启动终端,在Windows中我们没有看见过一个terminal程序,只要我们启动了一个shell,如cmd或者powershell,Windows会自动为我们启动一个一个的控制台,将他们依附在一起。
- Windows中的哲学是“一切皆对象“
- 在早期的windows中,其实也是参考着Unix的哲学思想,创建一些特殊的设备文件,比如要打印文件,就将文件输出到DLT设备文件中就行了,windows中的特殊文件与文件系统是分离的,他们是直接在内核中实现了,所有特殊文件的作用是是全局的,不管是在C:还是在E:中,都是可以直接使用PRN名称的,而不像是其他文件一样,需要提供相对路径或者绝对路径。
- 后来随着面向对象思想的发展,Windows开始采用面向对象的思想进行设计,一提到面向对象,就应该联想到API,所有Windows的”一切皆对象“就是”面向API“编程。但是Windows有为了兼容老的版本,还是保留了之前”一切皆文件“的特殊设备文件。所以现在的Windows就有了一个bug,命名的文件去掉扩展名之后不能使Windows为了兼容而保留的特殊设备文件的文件名,比如aux.txt, aux.h, con.txt等等,其他他们在Windows中已经用的不多了,在windows都是采用API实现这些了。
- 在命令行程序中键入的字符,虽然我们看到的是和在Unix shell中见到的一样,都是字符串,但是在回车之后就完全不听了,在Unix中会将内容转换为文件流,而Windows会将其转换为消息进行传输,也就是调用等效的API,为Console API,也就是说,如果我们现在想要实现一个Powershell,那么一定会疯狂的调用Console API。虽然在Unix中写bash也是调用api的进行系统调用的,但是两者在内部的实现是不同的,在Windows中的会将其封装成对象,接着在调用对象的API,而在Unix中则是直接操作的,没有加上对象这一层。为了能够变出跨平台的程序(以桌面程序为例),比如qt等,他们提供了统一的接口,在内部实现上调用了两个操作系统的API。调用Windows的API一般需要获取句柄,接着通过这个句柄调用对应的函数,而在Unix中就是函数,Windows的API数量是Unix的好几倍。
Windows与Unix思想的更多相关文章
- Windows和Unix下的编码问题
今天测试shell脚本时,执行报错: ./report.sh: /tmp/tmp.E8ekx6r5Qq/report.sh: /bin/bash^M: bad interpreter: No such ...
- Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换
(1)首先,要设置NotePad++能显示换行符,这个才干看到效果, 视图-->显示符号-->显示行尾符. {2}设置行尾符格式:编辑-->档案格式转换-->(可选Window ...
- WinScp结合Putty在Windows与UNIX之间进行文件传输
1. 关于传输协议: SSH Secure Shell安全外壳协议 SFTP Secure File Transfer Protocal安全文件传送协议 2. WinScp与Putty的作用: Put ...
- WINDOWS和UNIX换行符的理解
# WINDOWS和UNIX换行符的理解 **file1.txt**17.143.161.37 其他 美国54.163.255.40 其他 美国 弗吉尼亚州 亚马逊公司 **[ro ...
- Linux,Windows和UNIX的进程调度的分析
摘要 : 本文以Linux ,Unix ,Windows 操作系统为例,分析其进程调度策略,以期对进程调度过程有更深层次的认识 关键词 : 进程调度 优先级 时间片轮转 实时进程 分时技术 ...
- getch 和 getchar 在 windows 和 unix下的区别
注意getch()是从console读取,(非标准函数) getch()需要的头文件是<conio.h>. 而getchar()是从stdin,一般是指键盘 windows平台下ENTER ...
- 在Windows和UNIX下利用PHP和LDAP进行身份验证
我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者L ...
- C++ -windows与unix路径分隔符
文件路径中通常使用正斜杠和反斜杠 在Windows中 C++中“\\”是一种转义字符,他表示一个‘\’,就像\n表示回车一样.所以C++中的路径名: D:\matcom45\doc\users\_th ...
- Windows、Unix、Linux是什么类型的操作系统?
Windows:具有图形用户界面的视窗操作系统. Unix:多用户分时操作系统. Linux:类似Unix操作系统,用于个人计算机.
随机推荐
- vue生态圈
本文来自网易云社区 作者:刘凌阳 前言 公司社区上关于Vue的文章挺少的(少的可怜),不禁为Vue愤愤不平,此文应运而生. 但笔者水平有限,也写不了什么特别高深的东西,只能简单介绍下Vue生态圈,如有 ...
- 十、Node.js-url模块
下面使用之前提到过的note交互模式(可以在cmd直接执行js代码)进行学习url模块 跳出note模式同样是Ctrl+C(两次) 学习url模块主要是要掌握url模块的方法: url.parse() ...
- .db轻量级本地数据库
1.概述: db文件一般是数据库数据存放文件. db是datebase的缩写,是数据库文件. 我们可以简单的理解为db是本地轻量级数据库(用了缓存,储存少量本地数据,防止断电等突发意外的发生对我们的程 ...
- javascript 数组排序
var arr=[1,2,3,5,10,4,2,19,2,0]; alert(arr);//[1,2,3,5,10,4,2,19,2,0] arr.sort(function (a, b) {//升序 ...
- php代码审计4审计代码执行漏洞
代码执行漏洞代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行,当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,造成 ...
- SimpleDateFormat线程不安全及解决办法
原文链接:https://blog.csdn.net/csdn_ds/article/details/72984646 以前没有注意到SimpleDateFormat线程不安全的问题,写时间工具类,一 ...
- Python实现——二元线性回归(最小二乘法)
2019/3/30 二元线性回归--矩阵公式法_又名:对于python科学库的糟心尝试_ 二元线性回归严格意义上其实不过是换汤不换药,我对公式进行推导,其实也就是跟以前一样的求偏导并使之为零,并且最终 ...
- 使用过多的递归出现错误,“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生
class Program { static void Main(string[] args) { sub(0); } private static void sub(int count) { ...
- c语言和c++的相互调用
1.c与c++编译方式 (1)gcc和g++都可以编译.c文件,也都可以编译.cpp文件.g++和gcc是通过后缀名来辨别是c程序还是c++程序的(这一点与Linux辨别文件的方式不同,Linux是通 ...
- ajax beforeSend中无效果
asnyc:false 与beforesend 同时使用 无效果