<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]snprintf函数说明及简单使用及调试。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 22 Oct 2007 06:07:44 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	http_post.h<br/>[codes=php]<br/>#ifndef __HTTP_POST__<br/>#define __HTTP_POST__<br/><br/>#define SERVER_ADDR &quot;123.57.252.183&quot;<br/>#define SERVER_PORT 80<br/>#define SERVER_URL&nbsp;&nbsp;&quot;ai.egg.levoo.com&quot;<br/>#define SERVER_PATH &quot;/Api/upload&quot;<br/><br/>#define HTTP_HEAD&nbsp;&nbsp; &quot;POST %s HTTP/1.1&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Host: %s&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:59.0) Gecko/20100101 Firefox/59.0&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Accept-Language: en-US,en;q=0.5&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Accept-Encoding: gzip, deflate&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-Type: multipart/form-data; boundary=%s&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-Length: %ld&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Connection: close&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Upgrade-Insecure-Requests: 1&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DNT: 1&#92;r&#92;n&#92;r&#92;n&quot;&#92;<br/><br/><br/>#define UPLOAD_REQUEST&nbsp;&nbsp;&quot;--%s&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-Disposition: form-data; name=&#92;&quot;image&#92;&quot;; filename=&#92;&quot;%s&#92;&quot;&#92;r&#92;n&quot;&#92;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-Type: image/jpeg&#92;r&#92;n&#92;r&#92;n&quot;<br/><br/>unsigned long get_file_size(const char *path);<br/><br/>int http_post_upload_pic(const unsigned char *IP, const unsigned int port,char *URL, const char *filepath,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *ack_json, int ack_len); //Post方式上传图片<br/><br/>#endif<br/>[/codes]<br/><br/>[codes=php]<br/>#cat snprint.c <br/>#include &lt;stdlib.h&gt;<br/>#include &lt;sys/types.h&gt;<br/>#include &lt;stdio.h&gt;<br/>#include &lt;sys/socket.h&gt;<br/>#include &lt;netinet/in.h&gt;<br/>#include &lt;string.h&gt;<br/>#include &lt;sys/stat.h&gt;<br/>#include &quot;http_post.h&quot;<br/><br/>unsigned char http_boundary[64]={0};<br/>unsigned char send_request[1024]={0};<br/>unsigned char send_end[1024]={0};<br/>int main(int argc, char *argv[])<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;long long int timestamp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct timeval tv;<br/>&nbsp;&nbsp;&nbsp;&nbsp;timestamp = (long long int)tv.tv_sec * 1000 + tv.tv_usec;<br/>&nbsp;&nbsp;&nbsp;&nbsp;snprintf(http_boundary,64,&quot;---------------------------%lld&quot;,timestamp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;const char *filepath = argv[1];<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long totalsize = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long filesize = -1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long request_len = snprintf(send_request,1024,UPLOAD_REQUEST,http_boundary,filepath); //请求信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long end_len = snprintf(send_end,1024,&quot;&#92;r&#92;n--%s--&#92;r&#92;n&quot;,http_boundary); //结束信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct stat statbuff;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(stat(filepath, &amp;statbuff) &lt; 0){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return filesize;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}else{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesize = statbuff.st_size;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;eggpic.jpeg&#039;s filesize %ld&#92;n&quot;,filesize);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>}<br/>[/codes]<br/>#gdb a.out <br/>GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-94.el7<br/>Copyright (C) 2013 Free Software Foundation, Inc.<br/>License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt;<br/>This is free software: you are free to change and redistribute it.<br/>There is NO WARRANTY, to the extent permitted by law.&nbsp;&nbsp;Type &quot;show copying&quot;<br/>and &quot;show warranty&quot; for details.<br/>This GDB was configured as &quot;x86_64-redhat-linux-gnu&quot;.<br/>For bug reporting instructions, please see:<br/>&lt;http://www.gnu.org/software/gdb/bugs/&gt;...<br/>Reading symbols from /data/codesdev/http_post/a.out...done.<br/>(gdb) set args eggpic.jpeg<br/>(gdb) b 23<br/>Breakpoint 1 at 0x400645: file snprint.c, line 23.<br/>(gdb) r<br/>Starting program: /data/codesdev/http_post/a.out eggpic.jpeg<br/><br/>Breakpoint 1, main (argc=2, argv=0x7fffffffe798) at snprint.c:23<br/>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long end_len = snprintf(send_end,1024,&quot;&#92;r&#92;n--%s--&#92;r&#92;n&quot;,http_boundary); //结束信息<br/>(gdb) p argv[1]<br/>$1 = 0x7fffffffea21 &quot;eggpic.jpeg&quot;<br/><br/>(gdb) p filepath<br/>$2 = 0x7fffffffea1b &quot;eggpic.jpeg&quot;<br/><br/> if(stat(filepath, &amp;statbuff) &lt; 0){<br/>(gdb) p send_request<br/>$4 = &#039;-&#039; &lt;repeats 29 times&gt;, &quot;4197109&#92;r&#92;nContent-Disposition: form-data; name=&#92;&quot;image&#92;&quot;; filename=&#92;&quot;eggpic.jpeg&#92;&quot;&#92;r&#92;nContent-Type: image/jpeg&#92;r&#92;n&#92;r&#92;n&quot;, &#039;&#92;000&#039; &lt;repeats 887 times&gt;<br/><br/>30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;eggpic.jpeg&#039;s filesize %ld&#92;n&quot;,filesize);<br/>(gdb) p filesize<br/>$3 = 13473<br/>(gdb) n<br/>eggpic.jpeg&#039;s filesize 13473<br/>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>(gdb) n<br/><br/>snprintf在C语言里字符串上，Http里使用较多，<br/>int snprintf(char *restrict buf, size_t n, const char * restrict&nbsp;&nbsp;format, ...);<br/>函数说明:最多从源串中拷贝n－1个字符到目标串中，然后再在后面加一个0。所以如果目标串的大小为n <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的话，将不会溢出。<br/><br/>函数返回值:若成功则返回存入数组的字符数，若编码出错则返回负值。<br/><br/>Result1(推荐的用法)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdlib.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char str[10];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snprintf(str,sizeof(str),&quot;0123456789012345678&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;str = %s &#92;n&quot;,str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>root@darkstar:/home/zhangl/unixtest/chapter9# ./testsprintf&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>str = 012345678<br/><br/><br/>Result2:(不推荐使用)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;stdio.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdlib.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char str[10];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snprintf(str,18,&quot;0123456789012345678&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;str = %s &#92;n&quot;,str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>root@darkstar:/home/zhangl/unixtest/chapter9# ./testsprintf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>str = 01234567890123456<br/><br/><br/>snprintf函数返回值的测试：<br/>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;stdio.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;stdlib.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int main()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char str[10];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n=snprintf(str,sizeof(str),&quot;%s&quot;,&quot;abc&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;str = %s &#92;n&quot;,str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;n=%d&#92;n&quot;,n);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&nbsp;&nbsp; }<br/><br/><br/>Result:<br/><br/>root@darkstar:/home/zhangl/test# ./testsnprintf&nbsp;&nbsp;&nbsp;&nbsp;<br/>str = abc <br/>n=3<br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]snprintf函数说明及简单使用及调试。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>