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的好几倍。

原文地址:https://www.cnblogs.com/megachen/p/9941660.html

时间: 2024-11-10 00:54:23

windows与unix思想的相关文章

57 利用sed处理windows和Unix文档中的行结束符

UNIX和DOS/Windows系统的纯文本格式的换行方式是不同的,基于DOS/Windows的文本文件在每一行末尾有一个CR(回车)和LF(换行),而UNIX文本只有一个换行. 如果想将一个Unix文本转换为Windows文本,可以使用如下的sed命令行 sed -e 's/$/\r/' myunix.txt > mywin.txt 在该脚本中,'$'规则表达式将与行的末尾匹配,而'\r'告诉sed在其之前插入一个回车.在换行之前插入回车,立即,每一行就以CR/LF结束. 虽然很多程序不在乎D

Windows与Unix的字符转化

众所周知在Windows与Unix的之间的字符集编码和正则字符定位符是有很大的差异的,如果在不同系统之间传递文件总会带来因为字符集编码和字符定位符的不同带来很多的错误. 这里先说一下字符集编码,在unix,一般使用的是Utf-8,而在Windows中系统中用的就比较多了,大部分有GB2312(中文简体).BIG5(中文繁体)等等,那么如果使用的字符集不正确源文件打开就会有乱码,这个时候我们就需要用iconv来对源文件进行转换,以适应不同系统环境,iconv的用法如下: 用法: iconv [选项

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

(1)首先,要设置NotePad++能显示换行符,这个才能看到效果, 视图-->显示符号-->显示行尾符. {2}设置行尾符格式:编辑-->档案格式转换-->(可选Windows.Unix.Mac中的一种) 版权声明:本文为博主原创文章,未经博主允许不得转载.

Windows和Unix下的编码问题

今天测试shell脚本时,执行报错: ./report.sh: /tmp/tmp.E8ekx6r5Qq/report.sh: /bin/bash^M: bad interpreter: No such file or directory 找半天原因,结果发现是Windows和Unix下的编码问题,不兼容 在Linux下用vi编辑文本,在命令模式下用命令set ff=Unix  ,问题就解决了. Linux下测试经常会遇到这种情况,报错 ^M的一般就是编码问题解析不了.

菜鸟随笔(1)---Windows、Unix、Mac不同操作系统的换行问题 回车符\r和换行符\n

一只菜鸟横空出世,码农世界闯一闯,每天进展多一丢丢. Windows.Unix.Mac不同操作系统的换行问题 回车符\r和换行符\n 一.概念: 换行符'\n'和回车符'\r' (1)换行符就是另起一行 --- '\n' 10 换行(newline) (2)回车符就是回到一行的开头 --- '\r' 13 回车(return) 所以我们平时编写文件的回车符应该确切来说叫做回车换行符 CR: 回车(Carriage Return) \rLF: 换行(Line Feed) \n 二.应用: (1)在

getch 和 getchar 在 windows 和 unix下的区别

注意getch()是从console读取,(非标准函数) getch()需要的头文件是<conio.h>. 而getchar()是从stdin,一般是指键盘 windows平台下ENTER键会产生两个转义字符 \r\n, \r : 回到开头的地方. \n : 去到下一行开头 因此,getch()读到 \r 时就会返回他的ASCII码13.(后面的被无视了) 奇怪的问题是为什么getchar()会返回10呢? 前面不是说过返回第一个字符吗? 这的确会让人费解.实际上产生这个结果的原因是, get

【Python】Windows, Linux/UNIX, Mac OS X 下安裝 Python

下載地址:https://www.python.org/downloads/ 下載對應系統.對應位數的版本即可. [Windows] 一般選擇"Windows x86-64 executable installer",即 64 位兼容 32 位的可執行安裝程序. 打開安裝程序,先勾選"Add Python X.X to PATH",代表安裝時將 Python 對應版本目錄添加到 PATH 系統環境變量中,再選擇"Customize installation

Windows、Unix、Mac不同操作系统的换行问题-剖析回车符\r和换行符\n

转载链接:http://blog.csdn.net/tskyfree/article/details/8121951 一.概念: 换行符‘\n’和回车符‘\r’ (1)换行符就是另起一行  --- '\n' 10 换行(newline) (2)回车符就是回到一行的开头 --- '\r' 13 回车(return) 所以我们平时编写文件的回车符应该确切来说叫做回车换行符     二.应用: (1)在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符

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

我现在的老板曾要求我为企业内部的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者Linux而放弃. 我认为解决现在的UNIX/Windows问题的最好方法就是利用PHP的LDAP特性.由于LDAP,要求我使用现有的系统,主要指的是一个巨大的 Microsoft Exchange Server系统.我非常高兴使用Exchange,它很可靠,而且LDAP特性的使用和配置也极为简单.不