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. mysql 按照姓氏排序

    1.如果是gbk存储 order by name asc 2.非GBK order by convert(name using gbk) asc

  2. 630. Course Schedule III

    There are n different online courses numbered from 1 to n. Each course has some duration(course leng ...

  3. SignalR-001

    SignalR 是什么? ASP.NET Core SignalR 是一个开放源代码库,它简化了向应用添加实时 web 功能. 实时 web 功能立即使服务器端代码能够将内容推送到客户端. 一.有这么 ...

  4. kill 进程的一些小细节

    终止前台进程,可以用Ctrl+C组合键.但对于后台进程需要用kill命令. kill PID 还可以加信号(参数),默认情况下是编号为15的信号.term信号将终止所有不能捕捉该信号的进程. -s 可 ...

  5. opencv学习笔记3——图像缩放,翻转和阈值分割

    #图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...

  6. opencv学习笔记1

    #对图像的像素处理#法1print("------------------------")image = cv.imread("D:/1.jpeg",cv.IM ...

  7. sql 表字段模糊连接

    select AreauserCode,RtuName from TB_AreaUser as tau right join TB_MaintenanceInfo inf on inf.RtuName ...

  8. XAF实现交叉分析

    如何实现如图的交叉分析? In this lesson, you will learn how to add the Analysis functionality to your applicatio ...

  9. Qt 学习之路 2(62):保存 XML

    Home / Qt 学习之路 2 / Qt 学习之路 2(62):保存 XML Qt 学习之路 2(62):保存 XML  豆子  2013年8月26日  Qt 学习之路 2  9条评论 前面几章我们 ...

  10. ASP.NET后台取html控件值方式

    1.Request.Form[“cbName”]: 可以在后台取到所有为name 为的控件的value值 2.可以通过 把html控件的值付给HiddenField,然后后台调用 3.就是自定义属性 ...