经典小函数总结(工作总结)
2013-02-25 16:04
183 查看
1:
不定参数的处理方法
void i_error(const char *format, ...)
{
int old_errno = errno;
va_list args;
va_start(args, format);
error_handler(LOG_TYPE_ERROR, format, args);
va_end(args);
errno = old_errno;
}
2:unlink函数
if (unlink(buff) < 0) { /* shouldn't happen.. */
i_error("delete - unlink(%s) failed: %m", buff);
close(*fd);
return -1;
}
//删除链接文件,若shi文件本身则在fd全部关闭之后删除该文件,
如果有需要时候可以设置该函数指向自身文件 就不用再理会删除该文件了
3:
void fd_close_on_exec(int fd, bool set)
{
int flags;
flags = fcntl(fd, F_GETFD, 0);
if (flags < 0)
i_fatal("fcntl(F_GETFD, %d) failed: %m", fd);
flags = set ? (flags | FD_CLOEXEC) : (flags & ~FD_CLOEXEC);
if (fcntl(fd, F_SETFD, flags) < 0)
i_fatal("fcntl(F_SETFD, %d) failed: %m", fd);
}
该描述符设置了FD_CLOEXEC标志位,在调用execl执行程序之前,此描述符被自动关闭;但是在fork调用的子进程中,此描述符并不关闭,仍可使用。
这样可以避免大量描述符在调用exec进程之前手动关闭的麻烦和避免在exec进程执行时这些描述符丢失而无法关闭。
4:
防止链接失败导致死机
alarm(MYSQL_CONNECT_FAILURE_TIMEOUT);
failed = mysql_real_connect(conn->mysql, host, db->user, db->password,
db->dbname, db->port, unix_socket,
db->client_flags) == NULL;
alarm(0);
5:
使用 mysql_escape_string() 对查询中有疑问的数据进行编码:
有一些数据例如:
char query(1024);
sprintf (query, “select * from my_tbl where name = ‘%s’”,name);
如果这个时候,name 中包含了如: “0’Malley,Brian” 这样的数据就会产生这样的查询语句: select * from my_tbl where name = ‘0’Malley,Brian’ 这样就导致了错误的产生。
调用 mysql_escape_string() 的过程如下:
my $item = "aaa's bbb"
my $escape_item = mysql_escape_string($item);
此时,escape_item 的内容是: aaa\'s bbb
6://哈哈 终于被我找到了
FILE *fpw=fopen(log_dir,"a");
FILE *fpr=fopen(new_path,"r");
if(fpw != NULL && fpr != NULL){
char s_info[10000];
time_t cur_time = 0;
time_t timep;
cur_time = time(&timep);
while(!feof(fpr) && strcmp(s_info,"\n") != 0) {
memset(s_info,0,sizeof(s_info));
fgets(s_info,10000,fpr);
if( strncasecmp(s_info,"Message-ID: ",strlen("Message-ID: ")) == 0) //匹配出message-id和时间写到deeptrace.log里
{
fprintf(fpw,"%s",s_info);
break;
}
}
fprintf(fpw,"%ld\n",cur_time);//当前时间
fprintf(fpw,"%s\n",new_path);//new路径
fclose(fpr);
fclose(fpw);
}
不定参数的处理方法
void i_error(const char *format, ...)
{
int old_errno = errno;
va_list args;
va_start(args, format);
error_handler(LOG_TYPE_ERROR, format, args);
va_end(args);
errno = old_errno;
}
2:unlink函数
if (unlink(buff) < 0) { /* shouldn't happen.. */
i_error("delete - unlink(%s) failed: %m", buff);
close(*fd);
return -1;
}
//删除链接文件,若shi文件本身则在fd全部关闭之后删除该文件,
如果有需要时候可以设置该函数指向自身文件 就不用再理会删除该文件了
3:
void fd_close_on_exec(int fd, bool set)
{
int flags;
flags = fcntl(fd, F_GETFD, 0);
if (flags < 0)
i_fatal("fcntl(F_GETFD, %d) failed: %m", fd);
flags = set ? (flags | FD_CLOEXEC) : (flags & ~FD_CLOEXEC);
if (fcntl(fd, F_SETFD, flags) < 0)
i_fatal("fcntl(F_SETFD, %d) failed: %m", fd);
}
该描述符设置了FD_CLOEXEC标志位,在调用execl执行程序之前,此描述符被自动关闭;但是在fork调用的子进程中,此描述符并不关闭,仍可使用。
这样可以避免大量描述符在调用exec进程之前手动关闭的麻烦和避免在exec进程执行时这些描述符丢失而无法关闭。
4:
防止链接失败导致死机
alarm(MYSQL_CONNECT_FAILURE_TIMEOUT);
failed = mysql_real_connect(conn->mysql, host, db->user, db->password,
db->dbname, db->port, unix_socket,
db->client_flags) == NULL;
alarm(0);
5:
使用 mysql_escape_string() 对查询中有疑问的数据进行编码:
有一些数据例如:
char query(1024);
sprintf (query, “select * from my_tbl where name = ‘%s’”,name);
如果这个时候,name 中包含了如: “0’Malley,Brian” 这样的数据就会产生这样的查询语句: select * from my_tbl where name = ‘0’Malley,Brian’ 这样就导致了错误的产生。
调用 mysql_escape_string() 的过程如下:
my $item = "aaa's bbb"
my $escape_item = mysql_escape_string($item);
此时,escape_item 的内容是: aaa\'s bbb
6://哈哈 终于被我找到了
FILE *fpw=fopen(log_dir,"a");
FILE *fpr=fopen(new_path,"r");
if(fpw != NULL && fpr != NULL){
char s_info[10000];
time_t cur_time = 0;
time_t timep;
cur_time = time(&timep);
while(!feof(fpr) && strcmp(s_info,"\n") != 0) {
memset(s_info,0,sizeof(s_info));
fgets(s_info,10000,fpr);
if( strncasecmp(s_info,"Message-ID: ",strlen("Message-ID: ")) == 0) //匹配出message-id和时间写到deeptrace.log里
{
fprintf(fpw,"%s",s_info);
break;
}
}
fprintf(fpw,"%ld\n",cur_time);//当前时间
fprintf(fpw,"%s\n",new_path);//new路径
fclose(fpr);
fclose(fpw);
}
相关文章推荐
- Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc
- 工作中经典sql总结
- (总结)工作中常用的js自定义函数——日期时间类
- 总结工作中常用到的linux命令大全_经典
- 工作总结之:优化函数调用
- 工作总结日志<三> 数控系统RTLinux内核上几个系统类型和函数在RTAI内核上的对应
- js经典面试问题:如何让for循环中的setTimeout()函数像预想中一样工作?
- 工作总结:qsort函数用法
- js经典面试问题:如何让for循环中的setTimeout()函数像预想中一样工作?
- 日常工作问题总结(三十一)windows获取路径的几个函数GetCurrentDirectory,GetModuleFileName,GetFullPathName
- malloc()函数的工作机制 结构体的总结
- 工作第一周Oracle函数总结
- 2014-04-17工作日志:关于注册表的几个函数,我的总结。。。
- 工作总结3-typedef中的函数类型与函数指针类型
- 【工作总结】一组关于key=value类似配置文件的读写操作函数
- Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc
- c++虚函数经典例子演示
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
- 一位软件工程师的6年工作总结