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思想的更多相关文章

  1. Windows和Unix下的编码问题

    今天测试shell脚本时,执行报错: ./report.sh: /tmp/tmp.E8ekx6r5Qq/report.sh: /bin/bash^M: bad interpreter: No such ...

  2. Notepad++中设置Windows、Unix、Mac三种行尾换行符格式间的转换

    (1)首先,要设置NotePad++能显示换行符,这个才干看到效果, 视图-->显示符号-->显示行尾符. {2}设置行尾符格式:编辑-->档案格式转换-->(可选Window ...

  3. WinScp结合Putty在Windows与UNIX之间进行文件传输

    1. 关于传输协议: SSH Secure Shell安全外壳协议 SFTP Secure File Transfer Protocal安全文件传送协议 2. WinScp与Putty的作用: Put ...

  4. WINDOWS和UNIX换行符的理解

    # WINDOWS和UNIX换行符的理解 **file1.txt**17.143.161.37   其他    美国54.163.255.40   其他    美国 弗吉尼亚州 亚马逊公司 **[ro ...

  5. Linux,Windows和UNIX的进程调度的分析

    摘要 : 本文以Linux ,Unix ,Windows 操作系统为例,分析其进程调度策略,以期对进程调度过程有更深层次的认识     关键词 : 进程调度 优先级 时间片轮转 实时进程 分时技术   ...

  6. getch 和 getchar 在 windows 和 unix下的区别

    注意getch()是从console读取,(非标准函数) getch()需要的头文件是<conio.h>. 而getchar()是从stdin,一般是指键盘 windows平台下ENTER ...

  7. 在Windows和UNIX下利用PHP和LDAP进行身份验证

    我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者L ...

  8. C++ -windows与unix路径分隔符

    文件路径中通常使用正斜杠和反斜杠 在Windows中 C++中“\\”是一种转义字符,他表示一个‘\’,就像\n表示回车一样.所以C++中的路径名: D:\matcom45\doc\users\_th ...

  9. Windows、Unix、Linux是什么类型的操作系统?

    Windows:具有图形用户界面的视窗操作系统. Unix:多用户分时操作系统. Linux:类似Unix操作系统,用于个人计算机.

随机推荐

  1. angular 父组件调用子组件

    import { Component, OnInit, ViewChild } from '@angular/core'; @Component({ selector: 'app-child', te ...

  2. SOA IN Real World

    微软发布了一个名为“真实世界里的面向服务架构(SOA)”的电子书.这本书表达了微软对面向服务架构的观点,并包括了数个展示如何用微软产品和技术实现SOA的真实案例.书中解释到,SOA的功能型架构本身是松 ...

  3. javascript 视频播放指定的时间段

    javascript 视频播放指定的时间段 一.html5 vedio: //指定开始时间 player.currentTime=startPoint; player.play(); //使用事件来控 ...

  4. C# 继承(4)

    接上章: class NameList { public NameList() => Console.WriteLine("这个是NameList的构造函数"); publi ...

  5. Kubernetes -- Server 部署

    1.  Node 节点配置文件 1.1 下载相关的软件 wget https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz wget ...

  6. Django之跨域请求同源策略

    同源策略: 首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 而如果我们要跳过这个策略,也就是说非要跨域请求,那么就需要通过 ...

  7. 解决 Github用户名 变为 invalid-email-address 问题

    解决 Github用户名 变为 invalid-email-address 问题 If the identity used for this commit is wrong, you can fix ...

  8. linux防火墙(四)—— SNET和DNET原理及应用

    图(1) 一.SNAT策略 应用环境:局域网主机共享单个公网IP地址接入Internet,简单的说就是企业内部局域网想访问外部服务器时,网关型防火墙需要开启的SNAT应用策略. SNAT策略原理:网关 ...

  9. how to use windows azure market

    here is the sample. namespace USCrime2006and2007 { class Program { static void Main(string[] args) { ...

  10. 百度地图中使用mouseover事件获取经纬度时无法拿到鼠标所在位置的经纬度。

    用百度2.0的话使用mousemove 鼠标在地图区域移动过程中触发此事件.mouseover参数e中没有point参数