error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments

使用 open函数的时候,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权。

建议使用如下参数创建文件:

macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目

使用 macOS Sierra(10.12.3)开发 C/C++项目,经常用到网上的开源项目,很多项目是直接用 MakeFile来管理项目的,导致在调试,编辑项目的时候,比较麻烦,搜索了半天,才找到目前看来比较方便的方式,就是结合 Eclipse IDE for C/C++ DevelopersCMake Editor的方式来进行处理。

继续阅读macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目

在VC中用CMarkup类操纵XML

首先到http://www.firstobject.com/dn_markup.htm上面下载 CMarkup类,将 CMarkup.cppCMarkup.h导入到我们的工程中就可以了。编译可能会出现问题,解决的方法是在 CMarkup.cpp的开头加上 #include,或者关闭预编译也可以。

1.创建一个 XML文档

对于创建一个 XML文档,需要实例化一个 CMarkup对象,并调用 AddElem创建根元素。在这个位置,如果你调用 AddElem("School"),文档会简单的装一个空元素. 然后调用 AddChildElem在根元素的下面创建元素。

效果如下:

2.浏览特定元素

//***********************这样也可以*****************************/

//*********************或者这样也可以*************************/

//***********结果**************

3.修改元素
//把 Department为" English"改为" Chinese"

效果如下:

4.添加
4.1 添加在最后面(用 AddElem

效果如下:

4.2 添加在最前面(用 InsertElem

效果如下:

5.删除

效果如下:

上面的例子都是不带属性的,下面举一个带有属性的例子。
1.生成 XML文档

效果如下:

2.查找特定属性

3.修改特定属性

效果如下:

参考链接


在VC中用CMarkup类操纵XML

C/C++中的正则表达式库——PCRE, PCRE++

1. 什么是PCRE? 什么是PCRE++?
PCRE,全称是 Perl Compatible Regular Expressions。从名字我们可以看出 PCRE库是与 Perl中正则表达式相兼容的一个正则表达式库。PCRE是免费开源的库,它是由C语言实现的,这里是它的官方主页:http://www.pcre.org/,感兴趣的朋友可以在这里了解更多的内容。
要得到PCRE库,可以从这里下载:http://sourceforge.net/projects/pcre/files/

PCRE++是一个对 PCRE库的 C++封装,它提供了更加方便、易用的 C++接口。这里是它的官方主页:http://www.daemon.de/PCRE,感兴趣的朋友可以在这里了解更多的内容。
要得到 PCRE++库,可以从这里下载:http://www.daemon.de/PcreDownload

2. PCRE接口介绍
(1). pcre_compile

(2). pcre_exec

3. PCRE++接口介绍
PCRE++PCRE库封装成了两个类,一个是 RE_Options, 用来指定匹配选项,一个是 RE,用来提供匹配相关的接口。 RE_options类在这里我就不介绍了,我主要介绍一下 RE类:
(1) RE的构造函数传入正则表达式,并在构造函数中调用Init函数,将该正则表达进行编译
(2) REpattern()成员用来得到初始传入的正则表达式字符串
(3) REerror()成员用来得到匹配过程中的出错信息
(4) REFullMatch()成员用来判断某字符串整体是否匹配指定正则表达式
(5) REPartialMatch()成员用来判断某字符串的部分是否匹配指定正则表达式

4. PCRE/PCRE++使用注意事项
(1)使用 pcre请包含 pcre.h头文件
(2)使用 pcre_compile, pcre_exec后,记得调用 pcre_free释放内存,以免造成内存泄露
(3)使用 pcre编译的时候需要依赖 libpcre.a
(4)使用 pcre++请包含 pcrecpp.h头文件
(5)使用 pcre++RE类的析构函数会自动释放相关内存,因此不用担心内存泄露
(6)使用 pcre++编译的时候需要依赖 libpcrecpp.a
(7)使用 pcrecpp要使用 pcrecpp命名空间

5. PCRE使用举例
下面是例程:

下面是运行结果:

6. PCRE++使用举例
下面是例程:

下面是运行结果:

参考链接


深入浅出C/C++中的正则表达式库(三)——PCRE, PCRE++

fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突-解决

编译项目,遇到了这个问题

查了很多地方,解决方案是:

1.右键项目,属性,最顶端,配置为x64或者x86(如果没有该选项就新建)

2.链接器-高级,目标计算机选为一致的

运行还是会报这个错误

最后发现

3.链接器-命令行

最底部有一条指令,修改为一致的机型就可以了

android-ndk-r10e开启C++11,编译TEMP_FAILURE_RETRY错误

在使用select来操作socket的时候,一般都是会这么写

其中的“TEMP_FAILURE_RETRY”宏在“unistd.h”中的定义如下:

正常情况下,编译是没问题的。但是当在“Application.mk”中增加

之后,发现编译不通过了。报告“error: 'typeof' was not declared in this scope”。

解决方法:


“c++11”和“gnu++11”的差别:

“gnu++11”增加了很多的扩展“c++11”的功能,功能更加多,具体的扩展参考Extensions to the C++ Language

NDK下GCC定义__cplusplus不正确的问题

在C++升级之后,编译会出现“C++11 error: unable to find string literal operator 'operator"”这种错误,按照链接里面操作,在“android-ndk-r10e”上面依旧出现问题。

追踪了一下,才发现,这个是GCC的一个BUG,GCC-4.7,GCC-4.8中定义的__cplusplus 竟然都是 “__cplusplus=1”,这个是明显不正确的,具体的BUG内容查看“__cplusplus defined to 1, should be 199711L”。

尽管这个BUG已经修复了,但是很明显“android-ndk-r10e”使用的GCC版本并没有合并这个补丁。

解决方案

升级GCC到4.9,在”Application.mk“中增加

SharedWorker源码解析

最近工作需要了解WebWorker,根据RTFSC原则,空下来看一下Chrome的SharedWorker源码。

ShareWorker是共用Worker,Chrome的实现调用new SharedWorker会分配独立进程,不管调用多少次都只有这一个实例。除了进程管理,SharedWorker还需要通信,Chrome中SharedWorker通过MessagePort通信。

SharedWorker.cpp

其实SharedWorker挺简单的,进程管理,通信,下面看通信是如何实现的(急需恶补一番底层通信知识,预定下周把底层通信手段学习一遍)。

好吧,这个类也不怎么干活啊,活在WebMessagePortChannel和MessagePort里面做。

MessagePort

主要就是entangle函数里面,会做一次remote.setClient(this),然后dispatchEvent就很方便了。疑问就是 为什么postMessage会做一次disentangle

就是port看的晕晕的,还是去理解一下底层通信吧.

C++11 error: unable to find string literal operator 'operator"

一个简单的宏

一直都可以正常编译,但是当启用C++11的时候,报告编译错误

网上搜了一下,说是C++11要求,当字符串跟变量连接的时候,必须增加一个空格才行。因此简单修改如下即可。

注意:在“android-ndk-r10e”中使用的GCC版本,GCC-4.9之前的版本都存在"__cplusplus"宏定义错误的问题,需要参考“NDK下GCC定义__cplusplus不正确的问题”,把GCC升级到4.9

fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.

最近在使用 VS2015 编译以前用VS2008的项目的时候,提示错误:fatal error C1189: #error :  The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.

解决方法:在项目的“预处理器定义”中增加 "_XKEYCHECK_H"