Archive for the ‘Linux’ Category.

99%的人都理解错了HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

Continue reading ‘99%的人都理解错了HTTP中GET与POST的区别’ »

多思多想,根据函数定义找隐藏信息

今天遇到一个很长时间都没发现的问题

先看看这个函数定义:

struct tm *localtime(const time_t *clock);

一般情况下大家都不会觉得这个函数有什么问题

使用的时候通常会根据习惯这样写:

struct tm *pTime = localtime(const time_t *clock);

当然,一般这样用是没问题的,函数返回指针,我用指针接收它,当然不会有问题

但是当你仔细想想这个指针的存储位置时,你可能会想到一个很容易被忽略的问题:

第一:它不可能是栈地址,原因不用说,因为从下层堆栈返回一个栈地址给上层堆栈肯定是用不了的,会报段错误。

第二:它可能是new出来的堆地址,如果真是这样他肯定还会写一个回收这个地址的接口。或者他也会在说明文档里说明,那就要调用者自己去delete,当然这样很不友好,容易导致内存泄露,一般不会这样做。

第三:它可能是一个静态地址,如果真是这样。那你就得注意了,任何调用这个接口的地方返回的都是同一个地址,你必须即取即用。

第四:它可能是一个上层堆栈传进去的上层栈地址,但是从这个接口来看根本没有传地址进去,所有这个情况也不可能。

说了这么多,那么我们来看看这个函数的说明:

The return value points to a statically allocated struct which might be
overwritten by subsequent calls to any of the date and time functions.

这里已经清楚的说明这个函数是返回了一个静态结构体指针。每次调用都会覆盖里面的数据。

静态库和共享库库的定位搜索路径

库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:
在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。
在 /etc/ld.so.conf 文件中添加库的搜索路径。
将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择

Continue reading ‘静态库和共享库库的定位搜索路径’ »

C++ signal的使用

1. 头文件
#include <signal.h>
2. 功能
设置某一信号的对应动作
3. 函数原型
void (*signal(int signum,void(* handler)(int)))(int);
   分解来看:
   typedef void (*sig_t) (int);
sig_t signal(int sig, sig_t func);

第一个参数是目标信号。func参数是一个指针,指向某个处理该信号的函数。这个处理信号函数带有一个int型参数,并应返回void。
func参数也可以设定为下面的一些值:
   SIG_IGN: 如果func参数被设置为SIG_IGN,该信号将被忽略。
   SIG_DFL: 如果func参数被设置为SIG_DFL,该信号会按照确定行为处理。

centos手动安装gcc4.5

在CentOS(版本是4.8)进行了手动安装 gcc 4.5.0,在安装的过程中遇到不少问题,下面具体说一下我的安装过程。

首先在配置gcc的过程中会出现错误:gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

说明要安装gcc需要GMP、MPFR、MPC这三个库,可从ftp://gcc.gnu.org/pub/gcc/infrastructure/下载相应的压缩包。

由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。

这里三个库我用的版本分别是gmp4.3.2,mpfr2.4.2和mpc0.8.1。

Continue reading ‘centos手动安装gcc4.5’ »