您的位置:首页 > 其它

经典小函数总结(工作总结)

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: