Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式

P703

Linux读写内存数据的三种方式

1、read  ,write方式会在用户空间和内核空间不断拷贝数据,占用大量用户内存空间,效率不高

2、内存映射方式把设备文件的内存映射到应用程序中的内存空间,直接处理设备内存,这是一种高效的方式。mmap函数就是这种方式

如果程序中使用了mmap方法,需要使用munmap方法删除内存映射

3、 用户指针方式,是内存片段由应用程序自己分配。

18.2.1 羞辱柱与软件许可  shame:羞耻
看到这个三个字,你可能会很吃惊。羞辱柱是什么?这得从ffmpeg的软件许可证说起。ffmpeg是一个跨平台的视频和音频流方案,属于*软件,采用LGPL或GPL许可证,具体是什么还要依据你选择的组件来定。如果你使用了其中一些使用GPL协议发布的模块,那么你必须使用GPL协议。可是就有些不自觉的家伙使用了ffmpeg的代码,却并没有遵守LGPL/GPL协议,也就是没有公开自己的源代码。ffmpeg开发组很生气,后果很严重,便将这些违反协议的公司/组织/个人的网址贴在他们的“耻辱柱”的网页上,准备与这些公司/组织/个人商讨解决版权争议。不过现在我访问这个叫“耻辱柱”的网页http:// ffmpeg.org/shame.html发现,网页虽然还能访问,但已经看不到名单了,看来他们还是给这些违法者留了一点面子,让他们自觉地公布代码,然后在付诸法律行动。
提起软件许可的问题,我觉得还是要认真对待。越来越多的*软件(Free Software)使用GPL作为其授权声明,如果对GPL一点都不了解,有可能在使用*软件时会违反GPL的授权。如果是个人或不正规的公司倒也无所谓,但如果是有规模的公司,恐怕会有被起诉的风险。GPL是GNU General Public License(GNU通用公共许可证)的缩写形式。出发点是代码的开源免费使用、以及引用、修改、衍生代码的开源免费使用,但不允许修改后和衍生的代码作为闭源的商业软件发布和销售。Linux提倡*和分享的精神,所以Linux采用的是GPL协议。这也是为什么我们能用免费的各种Linux软件,包括商业公司的Linux和Linux上各种各样的由个人、组织以及商业软件公司开发的免费软件。
我们之前谈到的GStreamer采用的是LGPL协议。LGPL是GNU Lesser General Public License(GNU宽通用公共许可证)的缩写形式,旧称GNU Library General Public License(GNU库通用公共许可证)。基于LGPL的软件允许商业化销售,但不允许封闭源代码。如果你对遵循LGPL的软件进行任何改动或再次开发并予以发布,则你的产品必须继承LGPL协议,不允许封闭源代码。但是如果你的程序对遵循LGPL的软件进行的是连接、调用而不是包含,则允许封闭源代码。明白了吧?下图描绘了GPL和LGPL协议的要求。

Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式

Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式

我们开发的软件究竟采用GPL好,还是LGPL好呢?这个问题实际上是个策略问题。由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,如果是商业或者对代码有保密要求的软件就不适合集成或采用使用GPL协议的开源代码作为它的类库和二次开发的基础。因为私有软件开发者使用了GPL库就必须公开自己的源码,自己所开发软件也要免费,这些可能都是商业软件无法接受的条件。
但是对于*软件开发者来讲,大多数情况下采用GPL的优势比较大,*软件开发者联合起来借着这个机会相互之间利用各自的优势不断发展壮大。当然*软件开发也并不是所有情况都采用GPL就更好。你的库不是特殊和无法取代的库,很容易就能被私有软件以其他可替代库来实现。如果库不能给予*软件任何特别的优势,最好还是以LGPL发布该库,GNUC库(glibc)选择了LGPL就是因为这个原因。如果我们使用GPL发布该库,将迫使私有软件开发者不得不使用其他的库,那我们的函数库的存在意义就会打了一个大大的折扣。
另外,现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses/alphabetical)。我们常见的开源协议如GPL、LGPL、BSD、Apache License2.0以及MIT等都是OSI批准的协议。做开源项目的时候,我们需要弄清楚这些软件引用的协议,我们自己的软件采用哪种开源协议比较好,然后选择和决定使用哪个开源软件。

f

上一篇:CSS魔法堂:改变单选框颜色就这么吹毛求疵!


下一篇:Java事件监听的四种实现方式