pcre_exec函数用法详解

以前使用pcre_exec等一些系统函数,只是觉得使用man手册看一下即可,今天使用pcre_exec函数时发现,对着手册传入了参数,但是运行时总是提示:

Bus Error,即总线错误。百度了一下说引发原因:

   CPU处于性能方面的考虑,要求对数据进行访问时都必须是地址对齐的。如果发现进行的不是地址对齐的访问,就会发送SIGBUS信号给进程,使进程产生 core dump。RISC包括SPARC(一种微处理器架构)都是这种类型的芯片。x86系列CPU都支持不对齐访问,也提供了开关禁用这个机制。x86架构不要求对齐访问的时候,必定会有性能代价。例如,对int的访问应该是4字节对齐的,即地址应该是4的倍数,对short则是2字节对齐的,地址应该是2的倍数。

   Bus Error也有可能是因为机器物理问题或者访问无效物理地址,但这种情况非常少见。

看了几遍想不通,用法也没有错。

我的正则: Content-Disposition: form-data; name="mid"\r\n\r\n(.+?)
我的内容:-----------------------------1844345234353996331372705724
Content-Disposition: form-data; name="mid"

04DBFE2E64DB6DCDF5D096295877154FF000000000000003
-----------------------------1844345234353996331372705724

理论上讲,这些参数传进去,传出的应该是匹配整个正则的字符串偏移量和04DBFE2E64DB6DCDF5D096295877154FF000000000000003

但是运行总是报bus error。

最后的做法就是:现将包含Content-Disposition: form-data; name="mid"

现将其截取出来,比如上面的字符串截取出来就是:Content-Disposition: form-data; name="mid"

04DBFE2E64DB6DCDF5D096295877154FF000000000000003
-----------------------------1844345234353996331372705724

把截取之后的字符串出入,就可以使用上面的正则命中了。

原因还待考究。

你可能感兴趣的:(linux编程)