Archive

‘编程开发’ 分类存档

php使用root权限的方法

在linux下如果想要使用root权限执行命令,比较麻烦
网上大多说的是直接把webserver(apache、nginx)直接以root用户和组执行
试过apache下用root执行,但是已启动就报错
没去深究,我用的是提权的方法,将要执行的命令通过一个小程序来调用
小程序的代码如下
完整阅读

socket学习-粗糙的实现

虽然很想搞底层的东西,但是一直没啥机会
写写配置,改改逻辑,那些重要的东西都忘记了
还是得找时间自己更深入点

这份东西可以与cmd的telnet命令配合调试 完整阅读

linux shell的重定向

常用的有三个(共10个):
0(stdin,标准输入)
1(stdout,标准输出)
2(stderr,标准错误输出) 完整阅读

[转]内存划分,堆栈区分

一直对内存区域的划分,程序变量的内存分配问题模糊不清。进行多方参考总结如下。

一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
完整阅读

win下的一些版本的宏定义

_WIN32_WINNT:表示Windows的版本
Windows XP _WIN32_WINNT>=0×0501
Windows 2000 _WIN32_WINNT>=0×0500
Windows NT 4.0 _WIN32_WINNT>=0×0400

WINVER:也是表示Windows的版本
Windows 95、98 and Windows NT 4.0 WINVER=0×0400
Windows 98 and Windows 2000 WINVER=0×0500
Windows 2000 WINVER=0×0500
Windows xp WINVER=0×0501

_WIN32_IE:表示IE的版本
Internet Explorer 3.0 _WIN32_IE=0×0300
Internet Explorer 4.0 _WIN32_IE=0×0400
Internet Explorer 5.0 _WIN32_IE=0×0500
Internet Explorer 6.0 _WIN32_IE=0×0600

NET:Registered protocol family 2问题

今天在vbox下面安装centos,居然弄没一半就卡住了,停在
NET:Registered protocol family 2
网上搜了一下,可能是新版本vbox的默认设置原因
解决方法,就是在vbox设置下就可以了
到系统(system)–>将Enable IO APIC选中,重新安装即可

适用centos5的常用配置

#查看内核版本信息
cat /proc/version
uname -a
uname -r
完整阅读

mysql中事务的效率

对mysql的效率进行了一次测试

测试时,为使用预处理语句的本地测试

在没有使用事务的情况下
insert 100条记录3秒多

在使用事务的情况下(无论最后commit还是rollback)
insert 10000条记录3秒多
update 10000条记录4秒多
delete 10000条记录2.6秒左右

另外,在设置autocommit为false的情况下
是否使用事务的效率都差不多
我认为,在设置autocommit为true的情况下
每条语句都单独为一次事务
而为false的时候,则相当于若干条语句为一次事务处理

mysql的c连接器【Connector/C (libmysql)】

从昨天开始,进入mysql数据模块的编写
遇到两个问题
1、想要下载mysql c connector的源码在win下编译生成自己要的库文件,需要cmake等东西,放弃了,改用官方的dll和lib/a和so文件;
2、在使用官方的库文件的时候,发现有libmysql.dll、libmysql.lib以及一个mysqlclient.lib,搞不清楚。

 

在vs2005写了个测试程序,跑通了,但是就这几个文件的用途让人纠结,找了半天终于找到了说明
You can either link your code with the dynamic libmysql.lib library, which is just a wrapper to load in libmysql.dll on demand, or link with the static mysqlclient.lib library.
感觉写错了dll写成lib、lib写成dll,大概的意思就是说你要不用libmysql,要不就用mysqlclient。原文可以看这里

从网上搜了结果看来,使用libmysql.lib,还要多带一个libmysql.dll,而mysqlclient.lib则不用;另外mysqlclient.lib还链接进了一些额外的库,libcmtd.lib和msvcrtd.lib。

对于c connector 的一些api,可以在这里找到官方参考资料

 

下面是具体的使用过程遇到的一些情况:
————————————————————————————————————
首先,记得要#include<winsock2.h>
不然会报error C2146: 语法错误 : 缺少“;”(在标识符“fd”的前面)之类的问题

今天尝试只使用mysqlclient.lib,环境是vs2005,结果链接的时候报错了:
LIBCMT.lib(calloc.obj) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgheap.obj) 中定义
问题就在于前面说到的mysqlclient.lib还链接进了libcmtd.lib和msvcrtd.lib
在开始加上#pragma comment(linker,”/nodefaultlib:LIBCMT.lib”)
也有说还得加上#pragma comment(linker,”/nodefaultlib:MSVCRTD.lib”)
没去做测试,记录下

由于考虑到mysqlclient.lib带了多一些自己不熟悉的库,所以我改用直接链进libmysql.lib,直接使用,但没报错。

 

利用autotools进行编译生成

新项目刚开始,很多东西都要转回c++

而最近需要在linux下面完成c++工程的编译生成
对此,有两种方式
1、将项目放到eclipse之类的ide上,让它生成makefile文件,自动生成;
但是这种的对IDE的依赖显而易见;
2、使用automake、autoscan等autotools工具,写好脚本,文件增删透明化;
这种则需要花时间写脚本,配置autotools等,但到最后就只需要集合./configure && make的脚本就可以生成;

之前比较急,我也是直接靠IDE
上周开始查阅autotools的东西
用别人的脚本改成自己需要的东西
现在已经可以用了

简单说说autotools,总结归纳一下
autotools包括autoscan、automake、aclocal、autoconf、autoheader等
流程如下图:


一、使用autoscan生成configure.scan文件,这是根据你的工程生成的模板;
二、复制configure.scan成configure.in或者configure.ac,同时对configure.in进行修改并配置;
三、使用aclocal,读取configure.in,生成aclocal.m4;
四、有了configure.in和aclocal.m4就可以利用autoconf生成configure以及利用autoheader生成config.h.in
五、编写Makefile.am,这个用来说明需要什么,生成什么,该如何生成。
例如需要XXX静态库、XXX动态库,生成可执行文件XXX,我需要两个生成选项:debug和release等;
六、使用automake,读取Makefile.am和configure.in生成Makefile.in
七、执行./configure可以生成config.h,这个头文件可以方便不同环境中生成目标文件;
同时会生成梦寐以求的Makefile文件
八、接下来就make,完成!