您的位置:首页 > 运维架构 > Linux

linux下C的一些开发技巧总结

2014-05-05 16:42 344 查看
1、判断本机是32位还是64位:
(sizeof(long) == 8) ? 64 : 32;

2、设置当前进程的最大文件描述符限制:
/*http://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html
*设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,
* 硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,
* 同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。
*RLIM_INFINITY的值表示不对资源限制
*下面的函数将当前进程的描述符修改为iMaxNum,如果当前的描述符最大值已经超过了iMaxNum就不再修改;
*如果iMaxNum大于原来的描述符限制值,则采用试探的方式进行设置
*----------by jason.hou*/
void setFileOperaterNum(int iMaxNum, int iStep) {
rlim_t maxfiles = iMaxNum;
struct rlimit limit;

if (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
printf("Unable to obtain the current NOFILE limit (%s), assuming 1024 ", strerror(errno));
} else {
rlim_t oldlimit = limit.rlim_cur;
if (oldlimit < maxfiles) {
rlim_t f;
f = maxfiles;
while(f > oldlimit) {
limit.rlim_cur = f;
limit.rlim_max = f;

if (setrlimit(RLIMIT_NOFILE,&limit) != -1) break;
f -= iStep;
}
}
}
}

3、创建守护进程
void daemonize(void) {
int fd;

if (fork() != 0) exit(0); /* parent exits */
setsid(); /* create a new session */

if ((fd = open("/dev/null", O_RDWR, 0)) != -1) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
if (fd > STDERR_FILENO) close(fd);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: