精华内容
下载资源
问答
  • 怎样可以让自己看开一切
    千次阅读
    2019-08-15 21:03:27

    最近在本机电脑上运行虚拟机之后无法显示图像(屏幕一团黑),但点击显示缩略图的时候是可以看到系统已经启动并在正常运行的。可以通过以下方法解决:

    1.以管理员身份打开命令提示符

    2.输入命令:netsh winsock reset

    3.重启电脑

    黑屏可能原因如下:

    虚拟机和主机之间的通信,基本上是以socket的方式进行通信的(这里socket 泛指一切socket,包括本地的、网络的等等) 
    某个程序通过LSP给系统的TCP/IP stack 注入了自己的DLL,如果程序退出时,没有把这个DLL收回来,或者回收失败、没有彻底回收等,那么这DLL残留的东西影响了整个TCP/IP stack,而且是永久性的。每个socket收发的数据包是要经过TCP/IP stack的,这个**DLL 可能会对这些 socket 的数据包做了些什么操作(比如修改数据、直接丢弃等等),然后所以你的虚拟机就黑屏了……netsh winsock reset这条命令会重置,所以那些被注入的 DLL 就被清理掉了,所以一切都是最初的模样。

    更多相关内容
  • HTML怎么在手机打开

    万次阅读 2021-06-17 03:31:54
    2回答2021-05-06浏览:9分类:其他问题回答:HTML文件可以用手机浏览器打开。从本质上来说,Internet( 互联网)是一个由一系列传输协议和各类文档所组成的集合,HTML文件只是其中的一种。这些HTML文件存储在分布于...

    2

    回答

    2021-05-06

    浏览:9

    分类:其他问题

    回答:

    HTML文件可以用手机浏览器打开。

    从本质上来说,Internet( 互联网)是一个由一系列传输协议和各类文档所组成的集合,HTML文件只是其中的一种。这些HTML文件存储在分布于世界各地的服务器硬盘上,通过传输协议用户可以远程获取这些文件所传达的资讯和信息。

    网络浏览器,能够解释HTML文件来显示网页,这是网络浏览器的主要作用。当你使用浏览器在互联网上浏览网页时,浏览器软件就自动完成HTML文件到网页的转换。

    6d9d126cf8f2dc9c093f252ee80ef467.gif

    2

    回答

    2021-01-30

    浏览:53

    分类:网页设计

    回答:

    html文件可以用手机浏览器打开。

    从本质上来说,Internet( 互联网)是一个由一系列传输协议和各类文档所组成的集合,html文件只是其中的一种。这些HTML文件存储在分布于世界各地的服务器硬盘上,通过传输协议用户可以远程获取这些文件所传达的资讯和信息。

    网络浏览器,能够解释HTML文件来显示网页,这是网络浏览器的主要作用。当你使用浏览器在互联网上浏览网页时,浏览器软件就自动完成HTML文件到网页的转换。

    e98e4d26d4341080e5281db92b7ea913.gif

    2

    回答

    2021-05-06

    浏览:9

    分类:其他问题

    回答:1、以小米手机为例,首先在手机上利用QQ接收一个HTML文件。

    2、然后在手机QQ中点击该HTML文件,选择用其他应用打开。

    3、然后在其他应用中选择浏览器,点击下方的仅此一次。

    4、打开完成后的效果如图所示,HTML文件成功被在浏览器中打开HTML文件是可以被多种网页浏览器读取,传递各类资讯的文件。从本质上来说,Internet( 互联网)是一个由一系列传输协议和各类文档所组成的集合,HTML文件只是其中的一种。这些HTML文件存储在分布于世界各地的服务器硬盘上,通过传输协议用户可以远程获取这些文件所传达的资讯和信息。 网络浏览器,例如Netscape Navigator或Microsoft Internet explorer,能够解释HTML文件来显示网页,这是网络浏览器的主要作用。当你使用浏览器在互联网上浏览网页时,浏览器软件就自动完成HTML文件到网页的转换。 HTML文件是被网络浏览器读取,产生网页的文件。从本质上来说,环球网只是一个由HTML文件及一系列传输协议所组成的集合。这些HTML文件存储在分布于世界各地的计算机的硬盘上,而传输协议能把这些文件从一台计算机传输到另一台计算机。 网络浏览器,例如Netscape Navigator或Microsoft Internet explorer,能够解释HTML文件来显示网页,这是网络浏览器的主要作用。当你使用浏览器在环球网上浏览网页时,浏览器软件就自动完成HTML文件到网页的转换

    2

    回答

    2021-05-06

    浏览:4

    分类:其他问题

    回答:如果是AndroID手机现在就比较简单---本人刚回答过一个。。。

    目前个人手机只发现:

    AndroID手机、4.0版系统、UC浏览器V9.9.6.495,还是比较方便的预览HTML原型文件;

    首先把HTML文件通过PC等手段传输到手机存储卡中(最好建个新文件夹放进去方便记忆查找)

    1、打开UC浏览器

    2、打开隐藏的menu菜单(设置/皮肤什么的...菜单)

    3、点击菜单中的“下载/应用”

    4、页头会看到有“下载管理”“手机文件”“热门资源”

    5、点击“手机文件”

    (看到“安装包”“压缩文件”等之类无视它们,UC提供此功能有存储卡文件管理的赶脚)

    6、去看此处页面底部有个“存储卡”“返回”文字;

    7、点击“存储卡”;

    8、去翻找下你复制传输的HTML文件在手机存储卡位置;

    9、找到文件位置后打开,直接点击打开HTML文件,就发现一切都美好了... ...

    1

    回答

    2021-05-06

    浏览:5

    分类:其他问题

    回答:你想问的是如何在使用HTML5的移动网站吧。

    你只需要做一个移动网站,上传到空间,然后绑定域名空间就可以了。如果你有PC网站的话,需要进行一下适配。

    2

    回答

    2020-12-21

    浏览:4

    分类:办公入门

    回答:

    以华为mate20手机为例:

    1、首先点击手机的文件管理。

    2a3d5436e2b7520963652c5799495c13.gif

    2、点击分类下的文档。

    5269197fe3210d9b9b222824b627b083.gif

    3、以打开图上所示的Word文档为例,点击。

    509613c26a78b01ef8748cc03bf97424.gif

    4、在弹出的对话框中选择WPS,仅此一次。

    5a8f4c97e1018a300066b553121f88e2.gif

    5、可以看到Word文档被成功的打开了,点击左上角的编辑还可以编辑该Word文档。

    7ad14d4473c26206bebc12a89e8db9b6.gif

    2

    回答

    2021-05-06

    浏览:1

    分类:其他问题

    回答:

    1、以小米手机为例,首先在手机上利用QQ接收一个HTML文件。

    b282792b4a4a657bccab859d037f3d06.gif

    2、然后在手机QQ中点击该HTML文件,选择用其他应用打开。

    0b5e1b0b8324188efe2692a8e89f9855.gif

    3、然后在其他应用中选择浏览器,点击下方的仅此一次。

    41c7862d78a026ee2e8fd8b9ec1728ce.gif

    4、打开完成后的效果如图所示,HTML文件成功被在浏览器中打开。

    f900122f1e8e87ffcce5f30f9936a15c.gif

    2

    回答

    2021-01-30

    浏览:184

    分类:网页设计

    回答:

    1、以小米手机为例,首先在手机上利用QQ接收一个HTML文件。

    f7892882abc8263cda791aadbe4413fa.gif

    2、然后在手机QQ中点击该HTML文件,选择用其他应用打开。

    762962cdb2a479e1154b47d4a97d1447.gif

    3、然后在其他应用中选择浏览器,点击下方的仅此一次。

    603936cd0a5013611f870d2938e44b57.gif

    4、打开完成后的效果如图所示,HTML文件成功被在浏览器中打开。

    bf392daae189e6a723fea9b470fca36c.gif

    2

    回答

    2020-11-30

    浏览:8

    分类:办公入门

    回答:在手机上安装WPS Office 手机版,然后找到文档即可打开。

    WPS Office手机版是金山办公软件推出的、运行于Android平台上的全功能办公软件,支持查看、创建和编辑DOC/DOCX/WPS/XLS/XLSX/PPT/PPTX/TXT/PDF等23种常用Office文档,方便用户在手机和平板上使用,满足用户随时随地的办公需求,让用户的Office文档操作尽在掌控。

    软件特色:

    1.文档编辑掌上进行,随时随地享受办公乐趣。

    金山WPS Office移动版支持本地和在线存储文档的查看和编辑。编辑功能包括常用的文字编辑、格式处理、表格、图片对象等功能。

    2.强大的邮件"亲密"集成,轻松编辑发送附件。

    3.支持多种文档格式,管理文档更方便金山WPS Office移动版完美支持多种文档格式。

    2

    回答

    2020-10-19

    浏览:7

    分类:办公入门

    回答:手机怎么看word文档

    手机上必须保证已经安装了【wPS】这个应用专,没有安装的请在百度应用中心搜属索下,并安装好。如图,我的手机已经安装了wPS,所以看word文档完全无压力。

    点击【wPS】应用图标,进入wPS的首页面,再点击【所有文档】选项即可。

    在你手机的文件夹中找到你要查看的word文档,我随机选择了一个word,然后点击该文档打开即可。

    如图,该word文档被完美运行打开,查看非常的方便,还可以任意缩放大小。

    你也可以点击【wPS】顶端的功能选项,对该word文档的字体、段落、格式、排版等进行编辑、修改、调整,这一切就看你自己的工作学习需要了,不再详述。

    END

    2

    回答

    2021-05-06

    浏览:1

    分类:其他问题

    回答:目前个人手机只发现:

    AndroID手机、4.0版系统、UC浏览器V9.9.6.495,还是比较方便的预览HTML原型文件;

    首先把HTML文件通过PC等手段传输到手机存储卡中(最好建个新文件夹放进去方便记忆查找)

    1、打开UC浏览器

    2、打开隐藏的menu菜单(设置/皮肤什么的...菜单)

    3、点击菜单中的“下载/应用”

    4、页头会看到有“下载管理”“手机文件”“热门资源”

    5、点击“手机文件”

    (看到“安装包”“压缩文件”等之类无视它们,UC提供此功能有存储卡文件管理的赶脚)

    6、去看此处页面底部有个“存储卡”“返回”文字;

    7、点击“存储卡”;

    8、去翻找下你复制传输的HTML文件在手机存储卡位置;

    9、找到文件位置后打开,直接点击打开HTML文件,就发现一切都美好了... ...

    2

    回答

    2021-03-18

    浏览:2

    分类:办公入门

    回答:手机怎么看Word文档

    手机上必须保证已经安装了【WPS】这个应用,没有安装的请在百度应用中心搜索下,并安装好。如图,我的手机已经安装了WPS,所以看Word文档完全无压力。

    点击【WPS】应用图标,进入WPS的首页面,再点击【所有文档】选项即可。

    在你手机的文件夹中找到你要查看的Word文档,我随机选择了一个Word,然后点击该文档打开即可。

    如图,该Word文档被完美运行打开,查看非常的方便,还可以任意缩放大小。

    你也可以点击【WPS】顶端的功能选项,对该Word文档的字体、段落、格式、排版等进行编辑、修改、调整,这一切就看你自己的工作学习需要了,不再详述。

    END

    2

    回答

    2021-01-30

    浏览:71

    分类:网页设计

    回答:HTML文件在手机上可以用浏览器打开,比如QQ浏览器,UC浏览器等,浏览器是专门用于上网的解析HTML文件的,无论是手机或电脑,都用浏览器打开。

    1

    回答

    2021-05-06

    浏览:4

    分类:其他问题

    回答:如果你是要在手机上查看HTML源码,就需要下载个应用才可以;

    如果只是查看HTML的效果,可以直接用手机自带的浏览器查看。

    2

    回答

    2021-05-13

    浏览:0

    分类:办公入门

    回答:

    方法:

    1、手机可下载APP办公软件,如:“WPS Office 手机版”。

    f31f6f9bf1b8928b234dae282e3c76a6.gif

    2、根据不同型号手机,下载对应APP软件后,安装后即可打开Word及excel等文档。

    2

    回答

    2021-03-11

    浏览:6

    分类:其他问题

    回答:以安卓手机为例,安装WPS Office软件即可打开。

    手机上下载安装WPS Office软件。

    安装完毕后,找到doc文件就可以直接打开了。

    WPS Office AndroID版是全球领先的AndroID办公软件,适用于智能手机、平板电脑、智能电视、智能投影仪等多种设备,随时随地移动办公。包含文字(doc/docx)、表格(xls/xlsx)、演示(PPT/PPTx)、PDF四大组件,完美支持多达24种Office文档格式的查看及编辑。

    WPS Office还推出了iOS用于iPhone、ipad等移动设备使用。

    2

    回答

    2021-02-26

    浏览:1

    分类:办公入门

    回答:不知道啊

    1

    回答

    2021-05-06

    浏览:11

    分类:其他问题

    回答:

    使用浏览器。

    首先,需要打开.HTML文档需要使用浏览器打开才行。

    解决方法:将文件拖到系统浏览器中进行打开。

    下载手机百度,把文件放到手机百度中打开。

    下载其它浏览器进行打开。

    Iphone 6s可以使用默认的浏览器直接打开。

    注意:单个页面需要把CSS样式写在同一个HTML文件中,否则无法正常显示。

    HTML格式文件是网页的文件。那么打开方式不言而喻,用浏览器就可以。在苹果手机打开本地HTML文件方法有如下三种。

    将HTML放在一个云同步服务中,比如坚果云、dropbox、百度云盘,然后使用safari登录云服务,直接打开HTML即可。

    不越狱,通过GoodReader打开的,HMLT+CSS功能能够实现,但是JS有的功能可以实现,有的不可以。比如菜单移入移出和表格隔行换色,我在工具里面都能访问成功。

    越狱装插件,为使 iPhone Safari 能够使用本地文件 ,需要安装一个插件 :file://Schema in Safari ,这个插件可在 Cydia 上下载安装。

    点击安装浏览器或者选中文件点击更多打开方式;

    选择6s上面的默认浏览器进行打开;

    安装浏览器,如360浏览器,百度浏览器,点击等多发送至百度、360浏览器进行打开浏览。

    0

    回答

    2021-06-09

    浏览:1

    分类:其他问题

    1

    回答

    2020-12-15

    浏览:11

    分类:办公入门

    回答:

    手机怎么看Word文档手机上必须保证已经安装了【WPS】这个应用,没有安装的请在百度应用中心搜索下,并安装好。如图,我的手机已经安装了WPS,所以看Word文档完全无压力。

    点击【WPS】应用图标,进入WPS的首页面,再点击【所有文档】选项即可。

    947d1e319f9a4c0243bcd4dba0d3d95c.gif

    在你手机的文件夹中找到你要查看的Word文档,我随机选择了一个Word,然后点击该文档打开即可。

    f853da58d72f712e88f178c40292a010.gif

    如图,该Word文档被完美运行打开,查看非常的方便,还可以任意缩放大小。

    fff53d876bfd30e7aab5156d56bbf561.gif

    你也可以点击【WPS】顶端的功能选项,对该Word文档的字体、段落、格式、排版等进行编辑、修改、调整,这一切就看你自己的工作学习需要了,不再详述。

    2287233cd26aa01bb45e6ba8be411713.gif

    展开全文
  • 来自《实例演绎Unix/Linux的"一切皆文件"思想》 大家习惯了使用socket来编写网络程序,socket是网络编程事实上的标准。 我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,socket被表示成文件...

    来自《实例演绎Unix/Linux的"一切皆文件"思想》

    大家习惯了使用socket来编写网络程序,socket是网络编程事实上的标准。

    我们知道,在Unix/Linux系统中“一切皆文件”,socket也被认为是一种文件,socket被表示成文件描述符。

    但socket的行为并不很像文件。比如:

    • 无法用 “open一个路径” 的方式打开一个socket,必须用socket系统调用来创建。
    • 文件系统的close可以关闭socket描述符,但优雅关闭TCP socket却需要shutdown。
    • 标准文件系统没有诸如bind,connect,accept,recvfrom等操作。
    • socket编程繁琐易错,与标准文件操作open/read/write/close等迥异。

    如果能像对待标准文件那样对待socket,用read/write读写它,该有多好。本文就来实现这么一个机制来实现UDP socket的数据收发,非常简单,大概160行代码。

    在给出代码之前,我们得先理解什么是“一切皆文件”。这一切还要从最开始说起。

    “一切皆文件”之始

    在Unix原始论文《The UNIX TimeSharing System》中,里奇和汤普森就提出了“一切皆文件”的朴素思想。

    “Unix将普通文件和设备通过目录统一在了一个递归的树形结构中。形成了一个统一的命名空间。”

    Unix文件系统是一个挂载在ROOT的树形目录结构,每一个目录节点都可以挂载一棵子树。

    “一切皆文件”意味着这棵树上可以挂载一切。比如nfs就可以将网络上另外一台主机的文件系统挂载到本机的目录树上,想想看,这棵文件树上的一个文件竟然在另一台机器上,这是多么不可思议。

    但这终究只是个理想。

    “一切皆文件”之殇

    Unix宣称的 “一切皆文件” 并没有完全做到。我们看两个破坏优雅的反例:

    1. 奇怪的ioctl
    2. 奇怪的BSD socket

    “一切皆文件”的背后是一切操作都可以抽象成open,read,write,close。但是ioctl是什么鬼?

    有一些行为很难用read和write来定义,比如光盘播放时快进。ioctl的出现弥补了read/write的缺失。但是ioctl有自己的问题:

    • 无法根据一个文件描述符确定ioctl命令列表,只能根据错误码来判断。
    • ioctl命令和设备紧耦合,重依赖设备类型,控制命令呈暴增趋势。

    解决这个问题非常简单,为每一个设备增加一个名叫ctrl的文件。将ioctl的调用转换为针对ctrl文件的读写即可。典型的例子参见PCIe设备的配置空间的读写。

    总体而言,ioctl增加了文件操作的复杂性。

    现在说说socket的问题。

    虽然socket也是一个文件描述符,它的操作接口和标准文件接口非常不同:

    • 创建socket必须用socket调用而不是open,socket在打开之前不能存在。
    • bind,connect,accept等都是独立的系统调用,没有标准文件操作与之对应。

    socket一开始是作为一种封装TCP/IP网络流的IPC机制出现的,而TCP/IP一开始就没有被抽象成文件。下图来自关于socket的wiki:
    在这里插入图片描述
    可见,socket几乎就是为TCP量身定制的接口,和TCP状态机相互对应。换句话说,socket并不是严格意义上的文件。

    这意味着很难用统一的方法处理socket的IO流和普通文件的IO流。

    Unix “一切皆文件” 退化成了“一切皆文件描述符”:

    • 一切皆文件: 文件属于Unix/Linux目录树,编址于统一命名空间。
    • 一切皆文件描述符: 文件描述符属于进程打开文件表,进程内可见。

    同样奇怪的是pipe调用,它创建了一对文件描述符,但也仅仅是文件描述符,而没有被纳入到统一命名空间的Unix/Linux目录树中。

    Unix哲学中的“一切皆文件”和其它的原则比如“组合小程序”等是相辅相成的。如果“一切皆文件”被破坏,那么便很难简单串接小程序实现复杂逻辑:

    • socket没有标准文件的open和close操作,不能cat一个socket,也没法向一个socket里echo数据。

    因此就出现了socat,netcat这种大家都说好,但实际上没有必要的微型网络程序。

    如果一个网络连接也是一个系统目录树上的文件,便可以如下打开一个连接:

    sd = open("/sys/udp/1.1.1.1/53", ...);
    

    sacat,netcat没有必要了,直接在shell上就能完成所有的操作。比如发包可以这么做:

    echo aaaaaaa >/sys/udp/1.1.1.1/53
    

    对应收包操作如下:

    cat /sys/udp/1.1.1.1/53
    

    你甚至可以这样dup文件描述符:

    exec 6<>/sys/udp/1.1.1.1/53
    echo aaaaaaa >&6
    read -ru6 # cat <&6 将面临EOF问题。
    

    socat,netcat这些微型网络程序实际上就是标准文件IO接口对socket IO接口的封装。

    其实,bash shell中,就隐藏着这么一个socket文件的机制:
    在这里插入图片描述
    我们可以在bash中如下访问baidu的主页:

    bash-3.2$ exec 6<>/dev/tcp/www.baidu.com/80
    bash-3.2$ echo  'GET /index.html HTTP/1.1' >&6
    bash-3.2$ echo   >&6
    bash-3.2$ cat <&6
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 14615
    Content-Type: text/html
    ...
    

    是不是连telnet也不需要了呢?嗯,wget,curl都可以消失。

    事实上,我们可以用和处理普通文件完全一样的程序来处理socket,理论上只要有cat/read和echo/write两类4个命令就可以了。

    遗憾的是, /dev/tcp/www.baidu.com/80 文件并不存在,这只是bash为我们提供的一种善意的假象。

    如果你用过socat(可以直接用yum install安装),你会发现更酷的玩法,我们来看一个TCP服务器用socat怎么实现:

    [root@localhost ~]# socat tcp-listen:1234,reuseaddr,fork exec:bash,pty,stderr
    

    不用写一行代码。此时从另一个终端,我们便可以用telnet登录这个服务器:

    [root@localhost ~]# telnet 127.0.0.1 1234
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    bash: 此 shell 中无任务控制
    [root@localhost ~]# pwd
    pwd
    /root
    

    当然了,你可以同样用socat,这么干:

    [root@localhost ~]# socat -,raw,echo=0 tcp:host:1234
    

    如果一个连接可以表示成目录树中的一个文件,我们就不需要socat,telnet了,我们只需要cat/read和echo/write等两类命令即可完成所有这一切。

    我们可以自己实现这样的机制。

    插曲-“一切皆文件”之Plan 9原教旨

    写这篇文章的想法源自于我在班车上刷知乎,偶然间看到了Plan 9这个出自汤普森,里奇这帮人之手号称要取代Unix的下一代分布式操作系统(好长的描述)…

    Plan 9承诺彻底贯彻执行 一切皆文件。 这将使其有能力对外提供统一的文件系统视图,以实现分布式。

    Plan 9是一个真正的分布式系统,它可以将分布在不同位置的所有资源作为文件统一在同一棵目录树中,这便是Unix最初的愿景:
    在这里插入图片描述
    看上图,一台机器上的一个可执行文件可以运行在另一台机器的CPU上,这一切对于用户都是透明的,Plan 9用9P屏蔽了底层的通信细节。之所以能实现这样的效果,全部拜“一切皆文件”所赐。

    Plan 9的创举在于,它将分散的计算机的内部硬件组件和软件组件(而不是计算机本身)看成了独立的资源,而不管它们之间是如何连接的:

    • 同一台机器内部的资源通过内部总线连接。
    • 不同机器的资源通过网络连接。

    让我们领略一下Plan 9中的“一切皆文件”对于TCP而言意味着什么:
    在这里插入图片描述
    暂时不要恋战,先把本文看完,因为我下面的UDP的实例算是Plan实践的简版,理解了这个简版,再仔细阅读下面的链接以体会原汁原味的Plan 9-The Organization of Networks in Plan 9:
    http://doc.cat-v.org/plan_9/4th_edition/papers/net/

    Plan 9并没有由于其设计的先进性而变得流行起来,不过幸运的是,它的思想被Linux吸收了。我们便有机会在熟悉的Linux系统实现憧憬中的socket文件机制了。

    “一切皆文件”之Linux

    Linux贯彻一切皆文件的程度要远远超过传统Unix。Linux除了普通文件,目录,设备文件,管道等之外,实现非常多的特殊文件,这些都是直接或间接来自Plan 9:

    • procfs【此乃Plan 9的嫡系】
    • sysfs
    • cpuset
    • debugfs
    • cgroup

    真的是一切皆文件了。你无需调用特殊的接口,只需要echo就可以在sysfs中通过写文件的方式将CPU进行热插拔:

    [root@localhost ~]# echo 0 >/sys/devices/system/cpu/cpu0/online
    [root@localhost ~]# echo 0 >/sys/devices/system/cpu/cpu2/online
    

    结果就只剩2个CPU了

    [root@localhost ~]# cat /proc/cpuinfo |grep processor
    processor	: 1
    processor	: 3
    [root@localhost ~]#
    

    Linux sysfs实现UDP socket文件机制

    UDP socket文件就是基于这种sysfs实现的,我称它UDP socket sysfs。

    本文不是讲sysfs原理的,这方面的资源已经很多了,我就不再赘述。这里仅仅提sysfs的最基本特征:

    • 每一个可以表示为文件的对象Obj都是sysfs中的一个目录。
    • 每一个Obj的任何属性都表示为该Obj对应目录下的一个文件。

    以上面的CPU热插拔为例,/sys/devices/system/cpu是一个目录,它表示系统的所有CPU,其属性为:

    cpu0  cpu1  cpu2  cpu3  cpuidle  isolated  kernel_max  microcode  modalias  nohz_full  offline  online  possible  power  present  uevent
    

    我们查看其offline属性,它表示已经下掉的CPU,只需要读该文件即可:

    [root@localhost ~]# cat /sys/devices/system/cpu/offline
    0,2
    

    Linux sysfs使传统的ioctl系统调用再无必要。


    为了获得第一即视感,我先演示UDP socket sysfs文件的效果,然后再给出源码。

    我们希望用sysfs下的文件表示UDP socket,因此我们要创建一个表示UDP socket的目录:

    [root@localhost sysfs_test]# ls /sys/kobject_udp/
    ctrl
    

    该目录表示UDP socket的汇总,它有一个属性文件,即ctrl,对其读写将会触发一系列的事件:

    • 写create到ctrl:创建一个UDP socket。
    • 写shutdown到ctrl:销毁UDP socket。
    [root@localhost sysfs_test]# echo -n create >/sys/kobject_udp/ctrl
    [root@localhost sysfs_test]# ls /sys/kobject_udp/
    ctrl  instance_0
    [root@localhost sysfs_test]# ls /sys/kobject_udp/instance_0/
    ctrl  data
    [root@localhost sysfs_test]#
    

    创建一个UDP socket sysfs实例相当于在kobject_udp创建了一个目录instance_0,该UDP socket sysfs实例有两个属性:

    • data:用于数据的收发。
    • ctrl:用于控制,读写该文件可以实现connect,bind,set/getsockopt等。

    数据和控制相分离,但是它们都是Linux系统目录树中的可读写的文件,写ctrl就能达到对socket进行控制的效果:

    [root@localhost sysfs_test]# echo -n bind 127.0.0.1:123 >/sys/kobject_udp/instance_0/ctrl
    [root@localhost sysfs_test]# netstat -anup
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    udp        0      0 0.0.0.0:123             0.0.0.0:*                           -
    [root@localhost sysfs_test]#
    

    可见,通过写入UDP socket sysfs实例的ctrl文件,新建的socket便bind到本地123端口,可以通过netstat看出来操作已经成功。

    接下来我们将其connect到本地的另一个端口,试试数据的收发:
    在这里插入图片描述
    现在仿照bash的/dev/udp/ h o s t / host/ host/port的实现,试试文件描述符dup:
    在这里插入图片描述
    OK,工作的不错。就是要这样的效果。

    好了,现在该给出源码了:

    // sysudp.c
    // make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules
    // insmod ./sysudp.ko
    #include <linux/module.h>
    #include <linux/init.h>
    #include <linux/sysfs.h>
    #include <linux/ip.h>
    #include <linux/in.h>
    
    static struct kobject *udp_kobject, *srv;
    static char ctrl, cctrl, data;
    
    struct socket *ksock;
    struct sockaddr_in addr, raddr;
    struct msghdr msg;
    struct iovec iov;
    mm_segment_t oldfs;
    
    static int bind_socket(unsigned short port)
    {
    	memset(&addr, 0, sizeof(struct sockaddr));
    	addr.sin_family = AF_INET;
    	addr.sin_addr.s_addr = htonl(INADDR_ANY);
    	addr.sin_port = htons(port);
    
    	if (ksock->ops->bind(ksock, (struct sockaddr*)&addr, sizeof(struct sockaddr)) < 0)
    		return -1;
    
    	return 0;
    }
    
    static ssize_t cctrl_store(struct kobject *kobj, struct kobj_attribute *attr, char *buf, size_t count)
    {
    	// 为了代码简短,未做字符串解析,采用了硬编码,且仅支持一个socket的创建
    	if (!strcmp(buf, "connect 127.0.0.1:321")) { // 写ctrl文件实现connect
    		memset(&raddr, 0, sizeof(struct sockaddr));
    		raddr.sin_family = AF_INET;
    		raddr.sin_addr.s_addr = htonl(0x7f000001);
    		raddr.sin_port = htons(321);
    	} else if (strstr(buf, "bind 127.0.0.1:123")) { // 写ctrl文件实现bind
    		bind_socket(123);
    	} else if (strstr(buf, "setsockopt")) { // sockopt也是写文件完成
    		// TODO
    	}
    	return count;
    }
    
    static ssize_t cctrl_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
    {
    	return sprintf(buf, "bind x.x.x.x:yyy\nconnect x.x.x.x:yyy\nsetsockopt value\n[TODO]....\n");
    }
    
    static ssize_t data_store(struct kobject *kobj, struct kobj_attribute *attr, char *buf, size_t count)
    {
    	int size = 0;
    
    	if (ksock->sk == NULL) return 0;
    
    	iov.iov_base = buf;
    	iov.iov_len = count;
    	msg.msg_flags = 0;
    	msg.msg_name = &raddr;
    	msg.msg_namelen  = sizeof(struct sockaddr_in);
    	msg.msg_control = NULL;
    	msg.msg_controllen = 0;
    	msg.msg_iov = &iov;
    	msg.msg_iovlen = 1;
    	msg.msg_control = NULL;
    
    	oldfs = get_fs();
    	set_fs(KERNEL_DS);
    	size = sock_sendmsg(ksock, &msg, count);
    	set_fs(oldfs);
    
    	return size;
    }
    
    static ssize_t data_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
    {
    	int size = 2048;
    
    	if (ksock->sk == NULL) return 0;
    
    	iov.iov_base = buf;
    	iov.iov_len = size;
    	msg.msg_flags = 0;
    	msg.msg_name = &addr;
    	msg.msg_namelen  = sizeof(struct sockaddr_in);
    	msg.msg_control = NULL;
    	msg.msg_controllen = 0;
    	msg.msg_iov = &iov;
    	msg.msg_iovlen = 1;
    	msg.msg_control = NULL;
    
    	oldfs = get_fs();
    	set_fs(KERNEL_DS);
    	size = sock_recvmsg(ksock, &msg, size, msg.msg_flags);
    	set_fs(oldfs);
    
    	return size;
    }
    
    static struct kobj_attribute ctrl_attribute =__ATTR(ctrl, 0660, cctrl_show, cctrl_store);
    static struct kobj_attribute data_attribute =__ATTR(data, 0660, data_show, data_store);
    
    static ssize_t ctrl_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
    {
    	return sprintf(buf, "create\nshutdown\n[TODO]....\n");
    }
    
    static int create_socket()
    {
    	if (sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &ksock) < 0) 
    		return -1;
    
    	return 0;
    }
    
    static ssize_t ctrl_store(struct kobject *kobj, struct kobj_attribute *attr, char *buf, size_t count)
    {
    	// 仅支持一个socket
    	if (!strcmp(buf, "create")) { // 写ctrl文件创建socket实例
    		if (!srv) {
    			srv = kobject_create_and_add("instance_0", udp_kobject);
            	sysfs_create_file(srv, &ctrl_attribute.attr);
            	sysfs_create_file(srv, &data_attribute.attr);
    			create_socket();
    		}
    	} else if (!strcmp(buf, "shutdown")) { // 写ctrl文件销毁socket实例
    		if (srv)
    			if (ksock)
    				sock_release(ksock);
    			kobject_put(srv);
    			srv = NULL;
    	}
    
    	return count;
    }
    static struct kobj_attribute foo_attribute =__ATTR(ctrl, 0660, ctrl_show, ctrl_store);
    
    static int __init sysudp_init (void)
    {
    	int error = 0;
    
    	srv = NULL;
    	udp_kobject = kobject_create_and_add("kobject_udp", NULL);
    	if(!udp_kobject)
    		return -ENOMEM;
    
    	error = sysfs_create_file(udp_kobject, &foo_attribute.attr);
    
    	return error;
    }
    
    static void __exit sysudp_exit (void)
    {
    	if (srv) {
    		if (ksock)
    			sock_release(ksock);
    		kobject_put(srv);
    	}
    	kobject_put(udp_kobject);
    }
    MODULE_LICENSE("GPL");
    module_init(sysudp_init);
    module_exit(sysudp_exit);
    

    Review源码,我们发现了socket sysfs和socket接口的两点最大不同,socket sysfs文件有以下性质:

    • socket用sysfs的一个目录表示
      即socket sysfs文件作为一个对象在sysfs是一个目录,该目录下两个属性文件用于实际操作,一个是数据通信用的data属性文件,一个是作为控制使用的ctrl属性文件。
    • 消除了socket的open行为
      这是最精妙的。socket只能被创建而不是被打开,只有存在的东西才能被打开。能被打开的是socket的data属性文件和ctrl文件,打开它们的目的是读写它们,这就是“一切皆文件”在socket上的体现。

    在这个源码之后,其实还有很多的TODO:

    • socket文件的访问控制如何做
      以往的socket文件描述符的作用域是创建它的进程,如果采用sysfs文件的话,将会是全局可见,如何进程访问控制,需要设计一套规则。
    • 性能问题
      本文到此为止没有涉及任何有关性能的问题,但是在实际实现中,这个是必须要考虑的。

    UDP socket sysfs文件实现后,TCP呢?我们需要实现一个TCP的socket sysfs文件机制,从而可以用shell脚本粘合独立的小程序实现复杂的TCP客户端和TCP服务器。

    TCP客户端比较容易实现,和UDP socket文件实现类似,TCP服务端需要做的更多。典型是如何实现连接管理。或者说,到底还需不需要连接管理,需不需要socket的listen,accept那一套也都是疑问。

    bash没有实现类似 /dev/tcp/$host/$port 那样的伪设备文件来实现TCP脚本服务器,但是zsh的ztcp module可以做到。这里给出一个zsh脚本实现的TCP服务器:

    #!/usr/bin/zsh
    
    # 加载ztcp模块
    zmodload zsh/net/tcp
    
    # 处理IO,其实就是一个echo
    handle-io() (
    	# 从TCP client读取一行。这里用cat <&4会有问题,因为没有EOF
        read -ru4 line
        # 打印收到的东西
        echo from client: $line
        # 把收到的内容echo回对端
        echo echo from server: $line >&4
        # 关闭描述符
        exec 4>&-
    )
    
    ztcp -l -d 3 12345
    while ztcp -ad4 3; do
    	# 在子进程中处理TCP client
        (handle-io)
        # 父进程关闭TCP client
        exec 4>&-
    done
    

    多么典型的TCP accept/fork编程模型啊。

    写一个sysfs内核模块,实现以下机制即可:

    • 实现ztcp -l:通过写TCP目录的ctrl文件实现
    • 实现ztcp -a:接收连接后自动创建TCP client目录
    • 实现TCP通信:通过读写TCP client目录的data文件实现。

    这并不困难。

    我们憧憬着,将来netcat,socat,telnet,ztcp这类专门处理简单网络操作的微型程序将不再需要,我们只需要cat/read,echo/write即可。而这个憧憬在Plan 9上已经成了现实。

    思考

    本文结束之前,我们来思考一个问题:

    • 是设计一个新的API,还是用不同的参数调用既有API?

    以文件操作为例,假设文件IO的read和write都工作的很好,现在又个新的需求,要实现的业务逻辑我们称之为business,如何实现这个需求不外乎以下两种:

    1. 将business的逻辑封装成一个新的API,使用者直接调用
    2. 将business的逻辑抽象成数据流暴露给使用者

    这就又回到了《60行C代码实现一个shell》一文中的例子。

    请实现式子 a + b c \dfrac{a+b}{c} ca+b的计算。

    对于第1种方案,显然是要这么做:

    int business(int a, int b, int c)
    {
    	return (a+b)/c;
    }
    

    简单直接,实现又快。

    对于第2种思路,便需要如下步骤:

    1. 分别写一个表示两个数加法和两个数相除的程序。
    2. 用管道将这些程序组织起来,获取结果。

    显然没有第1种方法直接快速。但是,如果这个要求解的式子换成一元二次方程的求根公式怎么办?是重新重构business函数呢,还是重新组合运算符程序用管道连接它们呢?

    之所以会出现ioctl以及socket接口这种奇怪的API,因为它们足够直接,实现足够快速,才因此破坏了Unix“一切皆文件”的原则。

    这些API的名字基本能看出它们的功能,connect是建立连接的,bind是绑定地址的,ioctl是发送控制命令的。这些API只能做它们声明能做的事情。

    read和write则不然,参数只是一个裸buffer,在API层面没有任何自解释特征,所以,少就是多,无则是全,read和write事实上可以完成 “任意” 操作!

    这便是“一切皆文件”的精髓,这便是我写sysfs UDP socket文件模块的缘由,欣赏这种美并宣扬它便是我写这篇文章的动机。


    月雪 灌肠。
    浙江温州皮鞋湿,下雨进水不会胖。

    展开全文
  • word打不怎么办

    千次阅读 2021-07-29 05:34:29
    word是我们经常使用的文档编辑软件,我们电脑中的大部分文档文件都可以用word来阅读或者编辑,特别对于使用电脑办公的人士来说,几乎每天都要接触到word,最近有个朋友在使用word的时候,软件提示“Microsoft Office...

    word是我们经常使用的文档编辑软件,我们电脑中的大部分文档文件都可以用word来阅读或者编辑,特别对于使用电脑办公的人士来说,几乎每天都要接触到word,最近有个朋友在使用word的时候,软件提示“Microsoft Office Word遇到问题需要关闭。我们对此引起的不便表示抱歉。”,有两个选择“发送错误报告”和“不发送”。不管点击那个按钮怎么都不能正常打开word,假如软件关闭后,再重新打开,这时候会询问“是否以安全模式启动Word”?如果选择“是”,将进入“安全模式”。在安全模式下,Word将仅显示空白窗口,需要再手动打开文档方可显示。如果选择“否”,Word又将弹出这种对话框,不断的循环。

    笔者的朋友用了很多方法都没能解决这个word不能正常打开的问题,甚至重新安装了word都没能解决问题,最后请教到我,我只用了几个简单的步骤,即解决了word打不开的问题,具体方法如下,希望能对遇到word打不开的朋友有所帮助。

    word打不开怎么办:

    一、通用模板文件Normal.dot损坏导致打不开

    Normal.dot是word中的一个通用模板文件,有时候在使用word的过程中,电脑突然没有保存就关机了,容易导致Normal.dot文件损坏,就会导致下次word打不开的现象。

    解决方法1:

    我们只要删除这个损坏的Normal.dot文件即可,删除该文件后重新打开Word,Word就会自动生成一个新的Normal.dot,问题也就解决。

    删除Normal.dot的具体方法:进入documents and settings \ Administrator(或者是你的账户) \ Application Data \ Microsoft \ Templates ,删除该文件夹下的normal.dot,再重新打开Word,看看是不是能正常打开了呢?

    注意:Application Data这个文件夹是默认隐藏的,要显示这个文件文件夹的。步骤如下:打开我的电脑,然后选择上面菜单栏的工具  ->   文件夹选项   ->   查看  ->   “显示所有文件和文件夹”,同时去掉 “隐藏受保护的操作系统文件”,就可以看到 Application Data文件夹了。

    解决方法2:

    (1)在弹出的“是否以安全模式启动Word”时,选择“是”;

    (2)进入后,选择“菜单栏”的“文件”-->新建;

    (3)然后在右边的“新建文档”处点击“本机上的模板”

    (4)删除“空白模板”,确定。

    (5)重新运行Word,就可以恢复正常了。

    解决方法3:

    点击电脑最左下角的“开始”,打开windows菜单,在运行框中输入“winword /a”就可以启动word,这个时候不会有无法打开对话框出现,将word文档另存一下,会提示是否替换normal.dot,选择“是”,这个时候word会用新的模板替换损坏的那个normal.dot,这样Word就能够正常启动了。

    解决方法4:

    点击电脑最左下角的“开始”,打开windows菜单,在运行框中输入“winword /a”就可以启动word,我们打开“工具/选项/常规”,找到“打开时更新自动方式的链接”这一选项,看见前面选择框里的对勾了吗?直接把它去掉就行了。保存退出。重新启动试一下,一切正常,OK!

    二、注册表包含了OFFICE的错误信息,而注册表无法智能更新导致Word打不开

    解决办法:

    1、进入控制面板的添加删除程序,WINDOWS组件,随便选择一个把打沟取消掉,确定,更新以后,在进入添加删除程序的WINDOWS组件,把打沟还原...再确定.

    作用是:当你在添加或者删除WINDOWS组件的时候,系统会自动更新注册表的内容,把错误信息删除,更新。(当然,WINDOWS优化大师的医生程序也可以删除非法注册表信息,但不及系统自己搞定。)

    2、确认上面所有操作之后,你再重新安装OFFICE

    三、电脑感染病毒,导致Word打不开

    如果用上述方法还是不能解决,很有可能是电脑感染了病毒,尝试用360或金山杀毒等安全软件对电脑进行全盘扫描杀毒,待杀毒完毕,看能不能正常打开Word,假如杀毒还是不能解决问题的话,请看下一步。

    四、Word程序损坏或者软件关键文件丢失导致打不开

    到了这一步,唯一的办法只能是重新安装Word了,在重新安装Word之前,务必要记得备份你的word文档数据,在安全备份好你的重要的word文档数据后,在重新安装Word,应该能够解决问题。

    展开全文
  • 线路远了咱管不了,力所能及的就是看看自己的交换机和路由。   先检查被屏蔽的网址和IP,没有什么发现; 检查端口映射,也没有打开,如果打开,先关闭! UPnP,这是一个什么鬼!这个东西,简单说...
  • 下面就跟大家说说win10计算器打不开怎么解决。win10打开计算器的方法:1、计算器是缺省安装的应用,打开右下角的开始窗口后,在开始面板中找到计算器,但是点击后无任何反应。2、通过控制面板,添加删除windows组件...
  • 我的意思是,你想系统以及task的CPU利用率是多少它就是多少,一切都是由你的程序自己来 调制演奏。 这需要一种自指机制。 哈哈,完全可以,本文来演示,或者说,你可以把本文的内容看作一个戏弄运维人员的恶作剧。...
  • 一切皆是文件:UNIX,Linux 操作系統的設計哲學

    万次阅读 多人点赞 2020-08-19 10:37:27
    Linux 中的进程就是一个数据结构,明白就可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。 一、进程是什么 首先,抽象地来说,我们的计算机...
  • 不仅能帮我们度过一时的难关,还能我们安全放心的借到钱。 (网经社讯)而微粒贷就是这样一款产品,迎合了广大缺钱人士的需求,自从推出后便受到了一致好评,迅速火遍大江南北,腾讯官方表示截止到2017年末已累计...
  • 我做了七年电商,虽然不牛逼,但我因为同样的问题纠结过,所以说说我的心路历程。 就在刚刚过去的双十一,我在我媳妇面前得瑟,说我公司在双十一当天又卖了多少千万的时候...其实,选择打工还是自己创业,我认为只是
  • 电脑端QQ无法打开怎么办

    千次阅读 2021-04-29 13:57:36
    QQ可以说是我们生活中必不可少的社交软件,每天和朋友们联系的主要方式,但是经常会出现电脑端QQ无法打开的情况,可能是在安装新软件之后冲突导致的,博主遇到过好几次。不过出现这种情况不用慌张,真的只需要两步。...
  • ​​人和人之间唯一的不同...让自己上升到更高的思考层面。结合自己的实际情况去做出调整,而不是照搬照抄。 顶级思维模式一:因果思维 因果定律是宇宙的终极法则。“万法皆空,唯因果不空”。按佛家的说法,菩萨都...
  • 走进Linux(一切皆文件)

    万次阅读 多人点赞 2021-12-16 17:43:30
    众生皆浮云,一切皆文件 我来管系统,文件任我玩
  • 有哪些程序员受益终生的建议

    万次阅读 多人点赞 2019-10-28 07:11:59
    从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答...一腔肺腑之言,能进去多少,就自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
  • 评论为什么打不

    千次阅读 2021-08-12 09:39:11
    在此期间您可能会碰到一些问题,比如自定义模版显示不出来,个人首页显示不正常等情况,请大家不要心急,优化完成后一定不会有任何的影响,将恢复一切正常。如果您在使用中遇到任何问题请拨打客服电话95105670(提示...
  • 微信打开网页竟然走微信自己的DNS

    千次阅读 2017-01-09 10:11:00
    今天局域网内做测试,用了DNS劫持,在wifi环境的手机浏览器打开一切正常,按照劫持的走,但是把网址复制到微信,点发现走的是原来的网址。。。。一切明了!   挺好,微信为了安全也确实会玩! ...
  • gnome manjaro设置无法打开

    千次阅读 2019-12-27 17:31:54
    本文转载自:...我经常会写关于主题的博客,因为我想确保自己有问题记录以及解决方法。这是那些时代之一。 如上周所述,我最近从Debian切换到Arch Linux。对我而言,最大的吸引力是获得最新的GNOME...
  • 前段时间金三银四面试季,我也想试试自己的能力,于是投了阿里的测试岗,结果当然是失败了,学长为了安慰我,整理了一份互联网大厂真题和一下简历模板。
  • 99年和2000年的两次面试刺激到了我,我自己在心里一页页翻着自己的过去,最终我做出一个决定!计算机自学很难成功,就想着因该去重读大学!于是已经过了大学毕业年龄的我重回高中,重读高二,高三课程,重考大学。...
  • 如今电脑早已不是什么新鲜...接下来小编就来为大家介绍电脑自动关机的原因和解决方法,一起来看看吧。一、系统文件损坏电脑系统自带的文件被破坏了,如Win2K下的KERNEL32.DLL,Win98 FONTS目录下面的字体等系统...
  • 关于你得懂不懂的罗永浩

    万次阅读 多人点赞 2021-01-14 12:55:24
    这个发福,驼背,秃顶的中年男人在镜头前,拿出网络上的舆论来质问自己。 他一贯幽默,讽刺的话由他的嘴说出来还多了几分搞笑,大有一副躺平任踩的样子。 罗永浩的一路走来一直是高调开始,狼狈结尾。 确实,过度...
  • 从官网下载Anaconda之后,安装,一切正常。打开Anaconda navigator,提示我是否更新,我选了remind me later(埋个伏笔)。 接着点Spyder,打不。点击spyder之后,spyder的启动图标可以正常显示,图标下面
  • (2)启动cheese工具 输入如下命令: cheese 一切顺利,就可以成功打开摄像头了。 如下: 二、使用cheese命令后,出现黑屏状态 1、也就是出现如下状态,报出未发现设备的错误 2、解决方法 (1)首先在虚拟机内,...
  • 如何打开java工程文件

    万次阅读 2020-04-08 18:48:24
    重新安装了Eclipse之后,若想把自己之前创建的 java工程文件导入进来,有如下步骤 1.点击左上角file后,选择"Import",出现如下弹窗: 2.选择"General",选择"Existing Projects into Workspace",然后点击"next": 3...
  • 教你如何查看自己电脑关机记录

    千次阅读 2014-05-28 14:46:22
    如果能知道自己电脑的关机记录,那不就一清二楚了吗?下面我介绍两种方法,不用任何工具,一切手动完成,一般人我不告诉他哦!  一天记录轻松  如果你只是想查看一下,从昨天关机到今天开机之间有没有人...
  • 这个标题很吊丝哈,“其实一切只是源于我想要一台属于自己的笔记本”,结果导致我成为了一名合格的架构师。我不敢说我是优秀或者多少Strong,我只能说我是一个合格的架构师,一个合格的程序员(因为架构师首先是一个...
  • kettle spoon双击打开无反应

    千次阅读 2020-09-30 08:54:08
    但我尝试之后依然还是打不。 也尝试添加修改pentaho_javahome、kettle环境变量等,都失败了。 把kettle的所有文件删除重新安装也是失败。 最后思来想去,觉得这一切的失败可能跟注册表有关,因此就在注册表里...
  • python的官网都打不开了-python打不

    千次阅读 2020-10-29 14:33:41
    广告关闭腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元!问题原因:我之前装了python3,后来又装了python2,...常有同学反映 python 官网打不、网速慢,...
  • 工作例会怎么开

    千次阅读 2017-02-08 11:47:43
    但是,有管理经验的人都有这样的认识:管理例会好了的不多,80%的会议都没有什么效果。一般来讲,务虚的会议好,务实的会议难;计划性的会议好,解决问题的会议难;问题明显,要求整改的会议好;问题不...
  • 每一种情绪状态都有对应的能量指数,一般有抑郁问题或其他心理问题的人群都处于“负能量”的底层,来看看你的能量层级是多少吧~一、关于霍金斯和能量表霍金斯是美国的著名心理学家、灵性导师。他提出了一个非常著名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 372,364
精华内容 148,945
热门标签
关键字:

怎样可以让自己看开一切