<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cyher.NET &#187; c</title>
	<atom:link href="http://cyher.net/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://cyher.net</link>
	<description>Technology, Life, Code, OpenSource, *nix, Mac and iphone, Mobile development</description>
	<lastBuildDate>Sun, 25 Jul 2010 08:43:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>linux进程可执行文件的绝对路径</title>
		<link>http://cyher.net/programming/linux-process-absolute-path</link>
		<comments>http://cyher.net/programming/linux-process-absolute-path#comments</comments>
		<pubDate>Thu, 24 Sep 2009 08:55:46 +0000</pubDate>
		<dc:creator>cyher</dc:creator>
				<category><![CDATA[GNU/linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[proc]]></category>

		<guid isPermaLink="false">http://cyher.net/?p=637006</guid>
		<description><![CDATA[这种情况很少遇到，我们需要一个运行中进程的绝对路径，可惜的是glibc中或者系统调用中我都没有找到类似的函数。但是linux绝对不会不给你这个机会的，那就是proc文件系统了。在proc文件系统中那些数字都是运行中的进程，进入一个文件名为数字的文件夹以后，我们就可以发现以下类似文件目录结构。

&#91;cyher@cyher ~&#93;$ ls /proc/3355/
attr             cpuset   io        mountinfo   pagemap      smaps    task
auxv             cwd      latency   mounts      personality  stack    wchan
cgroup           environ  limits    mountstats  root         stat
clear_refs       exe      loginuid  net         sched        statm
cmdline          fd       maps      oom_adj     schedstat    status
coredump_filter  fdinfo   mem       oom_score   sessionid    syscall

这里就是一个进程所有的信息了大名鼎鼎的ps命令就是读取这里的内容解析出信息的，这里是ps的官方网站 http://procps.sourceforge.net/
那好了，就用这里给的信息来解析出执行文件的绝对路径吧

/*
 * =====================================================================================
 *
 *       Filename:  get_exe_path.c
 *
 *    [...]]]></description>
			<content:encoded><![CDATA[<p>这种情况很少遇到，我们需要一个运行中进程的绝对路径，可惜的是glibc中或者系统调用中我都没有找到类似的函数。但是linux绝对不会不给你这个机会的，那就是proc文件系统了。在proc文件系统中那些数字都是运行中的进程，进入一个文件名为数字的文件夹以后，我们就可以发现以下类似文件目录结构。</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>cyher@cyher ~<span style="color: #009900;">&#93;</span>$ ls <span style="color: #339933;">/</span>proc<span style="color: #339933;">/</span><span style="color: #0000dd;">3355</span><span style="color: #339933;">/</span>
attr             cpuset   io        mountinfo   pagemap      smaps    task
auxv             cwd      latency   mounts      personality  stack    wchan
cgroup           environ  limits    mountstats  root         stat
clear_refs       exe      loginuid  net         sched        statm
cmdline          fd       maps      oom_adj     schedstat    status
coredump_filter  fdinfo   mem       oom_score   sessionid    syscall</pre></div></div>

<p>这里就是一个进程所有的信息了大名鼎鼎的ps命令就是读取这里的内容解析出信息的，这里是ps的官方网站 <a href="http://procps.sourceforge.net/" target="_blank">http://procps.sourceforge.net/</a></p>
<p>那好了，就用这里给的信息来解析出执行文件的绝对路径吧</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*
 * =====================================================================================
 *
 *       Filename:  get_exe_path.c
 *
 *    Description:
 *
 *        Version:  1.0
 *        Created:  2009年09月23日 17时07分17秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  cyher (), cyher.net@gmail.com
 *        Company:  cyher.net
 *
 * =====================================================================================
 */</span>
&nbsp;
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#define BUF 128</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> agrc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> buf<span style="color: #009900;">&#91;</span>BUF<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">char</span> proc<span style="color: #009900;">&#91;</span>BUF<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>p<span style="color: #339933;">;</span>
&nbsp;
    sprintf<span style="color: #009900;">&#40;</span>proc<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;/proc/%d/exe&quot;</span><span style="color: #339933;">,</span> atoi<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    readlink<span style="color: #009900;">&#40;</span>proc<span style="color: #339933;">,</span>buf<span style="color: #339933;">,</span> BUF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/*proc/pid/exe 是一个链接，用readlink读*/</span>
    p <span style="color: #339933;">=</span> strchr<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span><span style="color: #ff0000;">'('</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/*读出的路径后面有可能会有 (deleted)字样，删去*/</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>p ！<span style="color: #339933;">=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        p<span style="color: #339933;">--;</span>
        <span style="color: #339933;">*</span>p <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    puts<span style="color: #009900;">&#40;</span>buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>这样就能读取出绝对路径了，不过你首先要知道pid啊 呵呵。</p>

	标签：<a href="http://cyher.net/tag/c" title="c" rel="tag">c</a>, <a href="http://cyher.net/tag/code" title="code" rel="tag">code</a>, <a href="http://cyher.net/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://cyher.net/tag/proc" title="proc" rel="tag">proc</a><br />

	<h4>相关日志</h4>
	<ul class="st-related-posts">
	<li><a href="http://cyher.net/gnulinux/%e5%ad%a6%e4%b9%a0%e7%bb%8f%e9%aa%8c" title="自己的嵌入式学习经验, 想不到别人给拍成视频了 (2009年08月9号)">自己的嵌入式学习经验, 想不到别人给拍成视频了</a> (0)</li>
	<li><a href="http://cyher.net/gnulinux/%e8%87%aa%e5%b7%b1%e6%9b%be%e7%bb%8f%e4%bd%9c%e8%bf%87%e7%9a%84%e5%b0%8f%e5%ae%9e%e9%aa%8c" title="自己曾经作过的小实验 (2009年08月16号)">自己曾经作过的小实验</a> (0)</li>
	<li><a href="http://cyher.net/apple/macos-x/technology_is_a_kind_of_belief_appl" title="科技是一种信仰(apple&#038;linux) (2009年01月12号)">科技是一种信仰(apple&#038;linux)</a> (5)</li>
	<li><a href="http://cyher.net/gnulinux/%e6%97%b6%e9%9a%94%e5%87%a0%e4%b8%aa%e6%9c%88%ef%bc%8c%e6%b2%a1%e6%83%b3%e5%88%b0%e6%88%91%e5%8f%88%e7%94%a8%e4%b8%8alinux%e4%ba%86%e3%80%82%e3%80%82%e3%80%82" title="时隔几个月，没想到我又用上linux了。。。 (2008年06月30号)">时隔几个月，没想到我又用上linux了。。。</a> (0)</li>
	<li><a href="http://cyher.net/hardware/%e5%a4%a7%e6%95%8c%e5%bd%93%e5%89%8d-%e5%a1%9e%e7%8f%ad%e5%92%8c%e5%be%ae%e8%bd%af%e5%9d%87%e5%8f%97ubuntu%e5%a8%81%e8%83%81" title="大敌当前 塞班和微软均受Ubuntu威胁 (2007年04月21号)">大敌当前 塞班和微软均受Ubuntu威胁</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://cyher.net/programming/linux-process-absolute-path/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql C API(上)</title>
		<link>http://cyher.net/programming/mysql-c-api%e4%b8%8a</link>
		<comments>http://cyher.net/programming/mysql-c-api%e4%b8%8a#comments</comments>
		<pubDate>Sun, 22 Feb 2009 13:46:50 +0000</pubDate>
		<dc:creator>cyher</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://cyher.net/?p=636894</guid>
		<description><![CDATA[Mysql,是开源界很有名的数据库,LAMP这种组合也是在web服务器领域很流行.也就是说,我们经常用的API都是一些web编程语言如:php,java,pyhton这些语言来和mysql通信,但是要是用c语言呢,我也就小小的研究一下.
文章参考:
mysql中文手册在线版
http://imysql.cn/docs/MySQL_51_zh/mysql_51.html
当你看完手册的时候,会发现,c语言也能像php一样
    

query = "select * from test";
mysql_query(query);

类似的语句,执行查询等数据库操作.但是C语言有一种更常用的方法,更好的方法.我们为什么用C,效率第一,所以看下面. 
为什么要用预处理？
答：MySQL客户端／服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执行的语句，预处理执行是一种有效的方式。首先对语句进行解析，为执行作好准备。接下来，在以后使用初始化函数返回的语句句柄执行一次或多次。
对于多次执行的语句，预处理执行比直接执行快，主要原因在于，仅对查询执行一次解析操作。在直接执行的情况下，每次执行语句时，均将进行查询。此外，由于每次执行预处理语句时仅需发送参数的数据，从而减少了网络通信量。
预处理语句的另一个优点是，它采用了二进制协议，从而使得客户端和服务器之间的数据传输更有效率。
下述语句可用作预处理语句：CREATE TABLE、DELETE、DO、INSERT、REPLACE、SELECT、SET、UPDATE、以及大多数SHOW语句。在MySQL 5.1中，不支持其他语句。
下面就把我的测试程序贴出来,是完成数据库的插入一条记录:
测试数据表结构：


1
2
3
4
5
6
7
8
9
10
11
12
13
14
+------------------+--------------+------+-----+---------+----------------+
&#124; Field            &#124; Type         &#124; Null &#124; Key &#124; Default &#124; Extra          &#124;
+------------------+--------------+------+-----+---------+----------------+
&#124; USER_ID          &#124; int&#40;11&#41;      &#124; NO   &#124; PRI &#124; NULL    &#124; auto_increment &#124;
&#124; USERNAME         &#124; varchar&#40;25&#41;  &#124; NO   &#124;     &#124; NULL    &#124;                &#124;
&#124; PASSWORD         &#124; varchar&#40;25&#41;  &#124; NO   &#124;     &#124; NULL    &#124;                &#124;
&#124; ARK_GROUP_ID     &#124; int&#40;11&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>Mysql,是开源界很有名的数据库,LAMP这种组合也是在web服务器领域很流行.也就是说,我们经常用的API都是一些web编程语言如:php,java,pyhton这些语言来和mysql通信,但是要是用c语言呢,我也就小小的研究一下.</p>
<div>文章参考:<br />
mysql中文手册在线版</div>
<div><a href="http://imysql.cn/docs/MySQL_51_zh/mysql_51.html">http://imysql.cn/docs/MySQL_51_zh/mysql_51.html</a></div>
<div>当你看完手册的时候,会发现,c语言也能像php一样</div>
<div>    </div>
<div>
<pre lang="c",line="1">query = "select * from test";
mysql_query(query);</pre>
</div>
<div>类似的语句,执行查询等数据库操作.但是C语言有一种更常用的方法,更好的方法.我们为什么用C,效率第一,所以看下面. </div>
<p>为什么要用预处理？</p>
<p>答：MySQL客户端／服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构。对于多次执行的语句，预处理执行是一种有效的方式。首先对语句进行解析，为执行作好准备。接下来，在以后使用初始化函数返回的语句句柄执行一次或多次。</p>
<p>对于多次执行的语句，预处理执行比直接执行快，主要原因在于，仅对查询执行一次解析操作。在直接执行的情况下，每次执行语句时，均将进行查询。此外，由于每次执行预处理语句时仅需发送参数的数据，从而减少了网络通信量。</p>
<p>预处理语句的另一个优点是，它采用了二进制协议，从而使得客户端和服务器之间的数据传输更有效率。</p>
<p>下述语句可用作预处理语句：CREATE TABLE、DELETE、DO、INSERT、REPLACE、SELECT、SET、UPDATE、以及大多数SHOW语句。在MySQL 5.1中，不支持其他语句。<br />
下面就把我的测试程序贴出来,是完成数据库的插入一条记录:</p>
<div>测试数据表结构：</div>
<div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">+------------------+--------------+------+-----+---------+----------------+</span>
<span style="color: #339933;">|</span> Field            <span style="color: #339933;">|</span> Type         <span style="color: #339933;">|</span> Null <span style="color: #339933;">|</span> Key <span style="color: #339933;">|</span> Default <span style="color: #339933;">|</span> Extra          <span style="color: #339933;">|</span>
<span style="color: #339933;">+------------------+--------------+------+-----+---------+----------------+</span>
<span style="color: #339933;">|</span> USER_ID          <span style="color: #339933;">|</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">11</span><span style="color: #009900;">&#41;</span>      <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span> PRI <span style="color: #339933;">|</span> NULL    <span style="color: #339933;">|</span> auto_increment <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> USERNAME         <span style="color: #339933;">|</span> varchar<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">25</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> NULL    <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> PASSWORD         <span style="color: #339933;">|</span> varchar<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">25</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> NULL    <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> ARK_GROUP_ID     <span style="color: #339933;">|</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">11</span><span style="color: #009900;">&#41;</span>      <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> NULL    <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> PURVIWE_GROUP_ID <span style="color: #339933;">|</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">11</span><span style="color: #009900;">&#41;</span>      <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> NULL    <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> DESCRIPT         <span style="color: #339933;">|</span> varchar<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> YES  <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span>         <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> USER_POLICY      <span style="color: #339933;">|</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">11</span><span style="color: #009900;">&#41;</span>      <span style="color: #339933;">|</span> YES  <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> <span style="color: #0000dd;">0</span>       <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> MAIL             <span style="color: #339933;">|</span> varchar<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">|</span> YES  <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span>         <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> PHONE            <span style="color: #339933;">|</span> varchar<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">15</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">|</span> YES  <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span>         <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">|</span> LEVEL            <span style="color: #339933;">|</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>       <span style="color: #339933;">|</span> NO   <span style="color: #339933;">|</span>     <span style="color: #339933;">|</span> <span style="color: #0000dd;">0</span>       <span style="color: #339933;">|</span>                <span style="color: #339933;">|</span>
<span style="color: #339933;">+------------------+--------------+------+-----+---------+----------------+</span></pre></td></tr></table></div>

</div>
<div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/*************************************************************************************
 *                                                                                     
 *       Filename:  mysqltest.h 
 *    Description:    
 *                                                                                     
 *        Version:  1.0 
 *        Created:  2009年02月16日 16时15分20秒 
 *       Revision: 
 *       Compiler:  gcc 
 * 
 *         Author:  cyher (), cyher.net@gmail.com 
 *        Company:  cyher.NET 
 *                                                                                     
 **************************************************************************************/</span> 
&nbsp;
<span style="color: #339933;">#ifndef MYSQLTEST_H</span>
<span style="color: #339933;">#define MYSQLTEST_H</span>
&nbsp;
<span style="color: #339933;">#define OK 0</span>
<span style="color: #339933;">#define ERROR -1</span>
<span style="color: #993333;">struct</span> user_info <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">int</span> ark_grp<span style="color: #339933;">;</span> 
        <span style="color: #993333;">int</span> puv_grp<span style="color: #339933;">;</span> 
        <span style="color: #993333;">int</span> level<span style="color: #339933;">;</span> 
        <span style="color: #993333;">char</span> name<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">25</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
        <span style="color: #993333;">char</span> pswd<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">25</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> init_datebase<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> my_insert<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> user_info <span style="color: #339933;">*</span> user<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">#endif</span></pre></td></tr></table></div>

</div>
<div>
<div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">**********************************************************</span>
 <span style="color: #339933;">*</span>                                                                                     
 <span style="color: #339933;">*</span>       Filename<span style="color: #339933;">:</span>  mysqltest.<span style="color: #202020;">c</span> 
 <span style="color: #339933;">*</span>    Description<span style="color: #339933;">:</span>  mysql 
 <span style="color: #339933;">*</span>                                                                                     
 <span style="color: #339933;">*</span>        Version<span style="color: #339933;">:</span>  <span style="color:#800080;">1.0</span> 
 <span style="color: #339933;">*</span>        Created<span style="color: #339933;">:</span>  <span style="color: #0000dd;">2009</span>年<span style="color: #208080;">02</span>月<span style="color: #0000dd;">16</span>日 <span style="color: #0000dd;">15</span>时<span style="color: #0000dd;">19</span>分<span style="color: #0000dd;">39</span>秒 
 <span style="color: #339933;">*</span>       Revision<span style="color: #339933;">:</span> 
 <span style="color: #339933;">*</span>       Compiler<span style="color: #339933;">:</span>  gcc 
 <span style="color: #339933;">*</span> 
 <span style="color: #339933;">*</span>         Author<span style="color: #339933;">:</span>  cyher <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> cyher.<span style="color: #202020;">net</span>@gmail.<span style="color: #202020;">com</span> 
 <span style="color: #339933;">*</span>        Company<span style="color: #339933;">:</span>  cyher.<span style="color: #202020;">NET</span> 
 <span style="color: #339933;">*</span>                                                                                     
 <span style="color: #339933;">***********************************************************/</span> 
&nbsp;
<span style="color: #339933;">#include                              /* mysql库 */ </span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include</span>
<span style="color: #339933;">#include &quot;mysqltest.h&quot;</span>
&nbsp;
MYSQL my_sql<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> init_datebase<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        my_bool on <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 
&nbsp;
        mysql_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
     <span style="color: #808080; font-style: italic;">/* MYSQL_OPT_RECONNECT如果发现连接丢失，启动或禁止与服务器的自动再连接。从MySQL 5.0.3 
          * 开始，默认情况下禁止再连接，这是5.0.13中的新选项， 
          * 提供了一种以显式方式设置再连接行为的方法。 */</span> 
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">!=</span> mysql_options<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #339933;">,</span> MYSQL_OPT_RECONNECT<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>on<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;Error set mysql_options for MYSOL_OPT_RECONNECT:%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> mysql_error<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>OK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>mysql_real_connect<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;localhost&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;root&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;123456789&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Grandi_Power&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>NULL<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;Error connecting to database: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>mysql_error<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>ERROR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span>OK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> my_insert<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> user_info <span style="color: #339933;">*</span> user<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
        MYSQL_STMT <span style="color: #339933;">*</span>stmt<span style="color: #339933;">;</span> 
        MYSQL_BIND  bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
        <span style="color: #993333;">int</span> user_name_len<span style="color: #339933;">,</span> user_pswd_len<span style="color: #339933;">;</span> 
&nbsp;
        my_ulonglong  affected_rows<span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>sql<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;insert into user (USERNAME,PASSWORD,ARK_GROUP_ID,PURVIWE_GROUP_ID,LEVEL) values(?,?,?,?,?)&quot;</span><span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>stmt <span style="color: #339933;">=</span> mysql_stmt_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>my_sql<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
                <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span> 
&nbsp;
        memset<span style="color: #009900;">&#40;</span>bind<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>bind<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>mysql_stmt_prepare<span style="color: #009900;">&#40;</span>stmt<span style="color: #339933;">,</span> sql<span style="color: #339933;">,</span> strlen<span style="color: #009900;">&#40;</span>sql<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                mysql_stmt_close<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span> ERROR<span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        user_name_len <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        user_pswd_len <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>pswd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_type</span> <span style="color: #339933;">=</span> MYSQL_TYPE_VAR_STRING<span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_length</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">;</span>                 <span style="color: #808080; font-style: italic;">/* 最大长度 */</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_null</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">length</span><span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>user_name_len<span style="color: #339933;">;</span>                   <span style="color: #808080; font-style: italic;">/* 实际长度的地址 */</span> 
&nbsp;
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_type</span> <span style="color: #339933;">=</span> MYSQL_TYPE_VAR_STRING<span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>pswd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_length</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">;</span>                 <span style="color: #808080; font-style: italic;">/* 最大长度 */</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_null</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">length</span><span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">long</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>user_pswd_len<span style="color: #339933;">;</span>                   <span style="color: #808080; font-style: italic;">/* 实际长度的地址 */</span> 
&nbsp;
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_type</span> <span style="color: #339933;">=</span> MYSQL_TYPE_LONG<span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>ark_grp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_null</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">length</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
&nbsp;
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_type</span> <span style="color: #339933;">=</span> MYSQL_TYPE_LONG<span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>puv_grp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_null</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">length</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
&nbsp;
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer_type</span> <span style="color: #339933;">=</span> MYSQL_TYPE_LONG<span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">buffer</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>user<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>level<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_null</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
        bind<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">length</span><span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mysql_stmt_bind_param<span style="color: #009900;">&#40;</span>stmt<span style="color: #339933;">,</span> bind<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                mysql_stmt_close<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span> ERROR<span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mysql_stmt_execute<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                mysql_stmt_close<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span> ERROR<span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        affected_rows <span style="color: #339933;">=</span> mysql_stmt_affected_rows<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">!=</span>affected_rows<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
                mysql_stmt_close<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
                <span style="color: #b1b100;">return</span> ERROR<span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
&nbsp;
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;INSERT SUCCEESFUL<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
        mysql_stmt_close<span style="color: #009900;">&#40;</span>stmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">struct</span> user_info user<span style="color: #339933;">;</span> 
        strcpy<span style="color: #009900;">&#40;</span>user.<span style="color: #202020;">name</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;haha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        strcpy<span style="color: #009900;">&#40;</span>user.<span style="color: #202020;">pswd</span><span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;ninini&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        user.<span style="color: #202020;">level</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span> 
        user.<span style="color: #202020;">ark_grp</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">88822</span><span style="color: #339933;">;</span> 
        user.<span style="color: #202020;">puv_grp</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">333</span><span style="color: #339933;">;</span> 
&nbsp;
        init_datebase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        my_insert<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>user<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
        <span style="color: #b1b100;">return</span> OK<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</div>
<div> </div>
</div>
<div>
<div>Makefile:</div>
<div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="makefile" style="font-family:monospace;">mytest: mysqltest.c  mysqltest.h
        gcc -o mytest mysqltest.c -I/usr/include/mysql -L/usr/lib/mysql  -lmysqlclient</pre></td></tr></table></div>

</div>
</div>

	标签：<a href="http://cyher.net/tag/c" title="c" rel="tag">c</a>, <a href="http://cyher.net/tag/database" title="database" rel="tag">database</a>, <a href="http://cyher.net/tag/mysql" title="mysql" rel="tag">mysql</a><br />

	<h4>相关日志</h4>
	<ul class="st-related-posts">
	<li><a href="http://cyher.net/programming/linux-process-absolute-path" title="linux进程可执行文件的绝对路径 (2009年09月24号)">linux进程可执行文件的绝对路径</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://cyher.net/programming/mysql-c-api%e4%b8%8a/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
