<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>unix&amp;linux</title><link>http://blog.vckbase.com/freedk/category/409.html</link><description>unix&amp;linux</description><managingEditor>自由空间</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>自由空间</dc:creator><title>aix、tuxdeo、informix问题</title><link>http://blog.vckbase.com/freedk/archive/2007/09/29/29767.html</link><pubDate>Sat, 29 Sep 2007 03:05:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2007/09/29/29767.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/29767.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2007/09/29/29767.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/29767.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/29767.html</trackback:ping><description>&lt;P&gt;&amp;nbsp;这个问题困扰了几天，十分烦恼。&lt;BR&gt;问题描述：&lt;BR&gt;程序：&lt;BR&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;#include &amp;lt;stdio.h&amp;gt;&lt;BR&gt;int&lt;BR&gt;main(int argc, char** argv)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR&gt;}&lt;/FONT&gt;&lt;BR&gt;makefile文件内容：&lt;BR&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;test:test.o&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buildclient&amp;nbsp; -o test&amp;nbsp; -f " test.o"&lt;BR&gt;&lt;/FONT&gt;现象：用make编绎报以下错误：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT face=Arial color=#0000ff size=2&gt;cc -O -c test.c&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buildclient&amp;nbsp; -o test&amp;nbsp; -f " test.o"&lt;BR&gt;Could not load program buildclient:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dependent module libengine.so could not be loaded.&lt;BR&gt;Could not load module libengine.so.&lt;BR&gt;System error: No such file or directory&lt;BR&gt;make: The error code from the last command is 255.&lt;/FONT&gt;&lt;BR&gt;我用which libengine.so&lt;BR&gt;/home/tuxedo/lib/libengine.so能找到，不用make，手工执行如下:&lt;BR&gt;cc -O -c test.c&lt;BR&gt;buildclient&amp;nbsp; -o test&amp;nbsp; -f " test.o"&lt;BR&gt;编绎通过。&lt;BR&gt;问题：工程比较大，不可能手工执行。&lt;BR&gt;&amp;nbsp; 经过N次的尝试，发现还是不能解决，也想不到是什么问题，后与BEA公司联系（BEA技术支持确实不错，非常热心），BEA也提供了几种思路，刚开始怀疑是makefile的问题，后改成BEA提供的makefile，内容如下：&lt;BR&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;INCDIR=$(TUXDIR)/include&lt;BR&gt;BINDIR=$(TUXDIR)/bin&lt;BR&gt;CFLAGS= -I$(INCDIR) -g&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;CSRC = \&lt;BR&gt;&amp;nbsp;test.c&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;OBJS = $(CSRC:.c=.o)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;EXES = \&lt;BR&gt;&amp;nbsp;test&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;FILES = \&lt;BR&gt;&amp;nbsp;stderr \&lt;BR&gt;&amp;nbsp;stdout \&lt;BR&gt;&amp;nbsp;tuxconfig&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;all: $(EXES) $(TUXCONFIG)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;test:&lt;BR&gt;&amp;nbsp; buildclient -v -o test -f test.c&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;clean:&lt;BR&gt;&amp;nbsp;rm -f $(OBJS) $(EXES) $(FILES)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;clobber: clean&lt;BR&gt;&amp;nbsp;rm -f *.o&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff size=2&gt;lint:&lt;BR&gt;&amp;nbsp;lint -u -D NOWHAT -I. -I$(INCDIR) $(CSRC)&lt;BR&gt;&lt;/FONT&gt;问题依旧，因为手工执行是可以编绎，makefile不应该存在问题，该makefile在aix5.1、tuxdeo8.0下是可以编绎过的。后来BEA建议用root用户去编绎，改用root编绎，程序通过。虽然问题已解决，但还有以下不解，因为buclient是调用aix上的cc编绎器，make是通过makefile来编绎，将makefile拆出来是可以编绎过，但make却不行（用ROOT可以），为什么了？BEA告诉我是AIX的安全问题，aix为了安全。个人不太赞同这种说法，由于涉及到AIX中的cc、tuxdeo中的buclient、informix中的esql，目前也不知道具体问题在哪，留给它们以后去处理吧。&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/29767.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>Connecting to a Datasource （UNIX） (ZT)</title><link>http://blog.vckbase.com/freedk/archive/2005/09/06/11909.html</link><pubDate>Tue, 06 Sep 2005 03:04:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/09/06/11909.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/11909.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/09/06/11909.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/11909.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/11909.html</trackback:ping><description>&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;First thing you will need is a variable of type SQLHENV. This is a handle (pointer) to an internal ODBC structure which holds all informationen about the ODBC environment. Without a handle of that kind you won't be able do to very much. To get this handle you call SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &amp;amp;V_OD_Env). V_OD_Erg is a variable of type SQLHENV which holds the allocated environment handle.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;If you have allocated the handle you need to define which version of ODBC to use. Therefore you should call SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0). The constant SQL_ATTR_ODBC_VERSION defines that the needed version of ODBC will be defined and SQL_OV_ODBC3 says that the program will need ODBC 3.0. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;Next thing to do is to create a handle for the database connection which is of the type SQLHDBC. Once again you call SQLAllocHandle this time with SQL_HANDLE_DBC and the variable to the environment returned by the first call to SQLAllocHandle. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;Then you may choose to modify the connection attributes, mainly the timeout for any given action on the connection. You do this by calling SQLSetConnectAttr with the connection handle, attribute and value pointer and the string length (if available).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;Finally we are able to connect to the database via SQLConnect, which needs the name of the data source, the username and password as parameters. For each parameter you need to specify how long the string is or just gib SQL_NTS which says that it is a string which length has to be determined by SQLConnect &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;That's it, we are connected to the database. Please note, that all functions mentioned on this page return either SQL_SUCCESS, SQL_SUCCESS_WITH_INFO if all went smoothly or SQL_ERROR or SQL_INVALID_HANDLE in case of an error. We will have a look on how to get diagnostic messages a little later. &lt;BR&gt;So let's have a look at the code: &lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;&amp;nbsp; &lt;BR&gt;/* odbc.c&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testing unixODBC&lt;BR&gt;*/&lt;BR&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;BR&gt;#include &amp;lt;stdio.h&amp;gt;&lt;BR&gt;#include &amp;lt;odbc/sql.h&amp;gt;&lt;BR&gt;#include &amp;lt;odbc/sqlext.h&amp;gt;&lt;BR&gt;#include &amp;lt;odbc/sqltypes.h&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;SQLHENV&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_Env;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Handle ODBC environment&lt;BR&gt;long&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_erg;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // result of functions&lt;BR&gt;SQLHDBC&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_hdbc;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Handle connection&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial color=#0000ff&gt;char&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_stat[10]; // Status SQL&lt;BR&gt;SQLINTEGER&amp;nbsp;&amp;nbsp; V_OD_err,V_OD_rowanz,V_OD_id;&lt;BR&gt;SQLSMALLINT&amp;nbsp;&amp;nbsp; V_OD_mlen;&lt;BR&gt;char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_msg[200],V_OD_buffer[200];&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face=Arial color=#0000ff&gt;int main(int argc,char *argv[])&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;// 1. allocate Environment handle and register version &lt;BR&gt;&amp;nbsp;V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&amp;amp;V_OD_Env);&lt;BR&gt;&amp;nbsp;if ((V_OD_erg != SQL_SUCCESS) &amp;amp;&amp;amp; (V_OD_erg != SQL_SUCCESS_WITH_INFO))&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;printf("Error AllocHandle\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;exit(0);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void*)SQL_OV_ODBC3, 0); &lt;BR&gt;&amp;nbsp;if ((V_OD_erg != SQL_SUCCESS) &amp;amp;&amp;amp; (V_OD_erg != SQL_SUCCESS_WITH_INFO))&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;printf("Error SetEnv\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);&lt;BR&gt;&amp;nbsp;&amp;nbsp;exit(0);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;// 2. allocate connection handle, set timeout&lt;BR&gt;&amp;nbsp;V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &amp;amp;V_OD_hdbc); &lt;BR&gt;&amp;nbsp;if ((V_OD_erg != SQL_SUCCESS) &amp;amp;&amp;amp; (V_OD_erg != SQL_SUCCESS_WITH_INFO))&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;printf("Error AllocHDB %d\n",V_OD_erg);&lt;BR&gt;&amp;nbsp;&amp;nbsp;SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);&lt;BR&gt;&amp;nbsp;&amp;nbsp;exit(0);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);&lt;BR&gt;&amp;nbsp;// 3. Connect to the datasource "web" &lt;BR&gt;&amp;nbsp;V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SQLCHAR*) "christa", SQL_NTS,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SQLCHAR*) "", SQL_NTS);&lt;BR&gt;&amp;nbsp;if ((V_OD_erg != SQL_SUCCESS) &amp;amp;&amp;amp; (V_OD_erg != SQL_SUCCESS_WITH_INFO))&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;printf("Error SQLConnect %d\n",V_OD_erg);&lt;BR&gt;&amp;nbsp;&amp;nbsp;SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; V_OD_stat, &amp;amp;V_OD_err,V_OD_msg,100,&amp;amp;V_OD_mlen);&lt;BR&gt;&amp;nbsp;&amp;nbsp;printf("%s (%d)\n",V_OD_msg,V_OD_err);&lt;BR&gt;&amp;nbsp;&amp;nbsp;SQLFreeHandle(SQL_HANDLE_DBC, V_OD_hdbc);&lt;BR&gt;&amp;nbsp;&amp;nbsp;SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);&lt;BR&gt;&amp;nbsp;&amp;nbsp;exit(0);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;printf("Connected !\n");&lt;BR&gt;&amp;nbsp;/* continued on next page */&lt;BR&gt;} &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/11909.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>rdtsc for Pentiums</title><link>http://blog.vckbase.com/freedk/archive/2005/05/19/5602.html</link><pubDate>Thu, 19 May 2005 15:31:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/05/19/5602.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/5602.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/05/19/5602.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/5602.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/5602.html</trackback:ping><description>&lt;H3&gt;For Pentiums, you can get the number of clock cycles elapsed since the last reboot with the following C code (which executes the CPU instrution named RDTSC): &lt;/H3&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;
&lt;HR&gt;
&lt;PRE&gt;   extern __inline__ unsigned long long int rdtsc()
   {
     unsigned long long int x;
     __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
     return x;
   }
&lt;/PRE&gt;
&lt;HR&gt;
&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You can poll this value in a busy loop to delay for as many clock cycles as you want&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/5602.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>Here's a piece of simple example code for I/O port access</title><link>http://blog.vckbase.com/freedk/archive/2005/05/19/5601.html</link><pubDate>Thu, 19 May 2005 15:24:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/05/19/5601.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/5601.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/05/19/5601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/5601.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/5601.html</trackback:ping><description>#include &amp;lt;stdio.h&amp;gt;&lt;BR&gt;#include &amp;lt;unistd.h&amp;gt;&lt;BR&gt;#include &amp;lt;asm/io.h&amp;gt;&lt;BR&gt;&lt;BR&gt;#define BASEPORT 0x378 /* lp1 */&lt;BR&gt;&lt;BR&gt;int main()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; /* Get access to the ports */&lt;BR&gt;&amp;nbsp; if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; /* Set the data signals (D0-7) of the port to all low (0) */&lt;BR&gt;&amp;nbsp; outb(0, BASEPORT);&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; /* Sleep for a while (100 ms) */&lt;BR&gt;&amp;nbsp; usleep(100000);&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; /* Read from the status port (BASE+1) and display the result */&lt;BR&gt;&amp;nbsp; printf("status: %d\n", inb(BASEPORT + 1));&lt;BR&gt;&lt;BR&gt;&amp;nbsp; /* We don't need the ports anymore */&lt;BR&gt;&amp;nbsp; if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}&lt;BR&gt;&lt;BR&gt;&amp;nbsp; exit(0);&lt;BR&gt;}&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/5601.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>最近需用dbx调试程序，转一篇dbx使用指南:</title><link>http://blog.vckbase.com/freedk/archive/2005/04/19/4819.html</link><pubDate>Tue, 19 Apr 2005 06:13:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/04/19/4819.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/4819.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/04/19/4819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/4819.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/4819.html</trackback:ping><description>&amp;nbsp;&lt;BR&gt;1:实用命令&amp;nbsp;&lt;BR&gt;quit/q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;退出&amp;nbsp;&lt;BR&gt;q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;退出&amp;nbsp;&lt;BR&gt;run&amp;nbsp;arg1&amp;nbsp;arg2&amp;nbsp;...&amp;nbsp;&amp;nbsp;用参数运行现有进程&amp;nbsp;&lt;BR&gt;r&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用上次的参数再次运行&amp;nbsp;&lt;BR&gt;stop&amp;nbsp;at&amp;nbsp;&amp;lt;line&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;在第line行设断点&amp;nbsp;&lt;BR&gt;stop&amp;nbsp;at&amp;nbsp;&amp;lt;proc&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;在过程proc被调用处设断点&amp;nbsp;&lt;BR&gt;cont&amp;nbsp;&amp;lt;singal&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;继续运行到记号(断点或其他)处&amp;nbsp;&lt;BR&gt;return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;执行完目前的进程返回&amp;nbsp;&lt;BR&gt;print&amp;nbsp;&amp;lt;exp&amp;gt;&amp;nbsp;...&amp;nbsp;&amp;nbsp;&amp;nbsp;打印表达式的值&amp;nbsp;&lt;BR&gt;printf&amp;nbsp;"string",exp,...&amp;nbsp;&amp;nbsp;用c语言的格式打印结果&amp;nbsp;&lt;BR&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;打印当前调试状态,包括当前进程等信息&amp;nbsp;&lt;BR&gt;func&amp;nbsp;&amp;lt;proc&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;看当前运行进程名/移动到调用proc进程的母进程处&amp;nbsp;&lt;BR&gt;file&amp;nbsp;&amp;lt;file&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;查看的文件切换到file文件处&amp;nbsp;&lt;BR&gt;list&amp;nbsp;&amp;lt;exp1&amp;gt;,&amp;lt;exp2&amp;gt;&amp;nbsp;&amp;nbsp;从file文件中列出从exp1行到exp2行&amp;nbsp;&lt;BR&gt;list&amp;nbsp;&amp;lt;exp&amp;gt;:&amp;lt;int&amp;gt;&amp;nbsp;&amp;nbsp;列出file文件中从exp行开始的int行&amp;nbsp;&lt;BR&gt;whatis&amp;nbsp;&amp;lt;variable&amp;gt;&amp;nbsp;&amp;nbsp;显示变量的类型&amp;nbsp;&lt;BR&gt;sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;崭时进入sh状态&amp;nbsp;&lt;BR&gt;sh&amp;nbsp;&amp;lt;shell&amp;nbsp;command&amp;gt;&amp;nbsp;&amp;nbsp;执行一shell命令&amp;nbsp;&lt;BR&gt;2:常用命令说明&amp;nbsp;&lt;BR&gt;alias&amp;nbsp;name&amp;nbsp;"string"&amp;nbsp;&amp;nbsp;把string内容定义为一缩略语name&amp;nbsp;&lt;BR&gt;help&amp;nbsp;section&amp;nbsp;&amp;nbsp;&amp;nbsp;寻找某指令的帮助&amp;nbsp;&lt;BR&gt;playback&amp;nbsp;input&amp;nbsp;&amp;lt;file&amp;gt;&amp;nbsp;&amp;nbsp;从file中调入调试命令流&amp;nbsp;&lt;BR&gt;playback&amp;nbsp;output&amp;nbsp;&amp;lt;file&amp;gt;&amp;nbsp;&amp;nbsp;输出file中的调试命令流&amp;nbsp;&lt;BR&gt;record&amp;nbsp;input&amp;nbsp;&amp;lt;file&amp;gt;&amp;nbsp;&amp;nbsp;把调试过程输出到file中&amp;nbsp;&lt;BR&gt;record&amp;nbsp;output&amp;nbsp;&amp;lt;file&amp;gt;&amp;nbsp;&amp;nbsp;把命令的运行输出保存到file中&amp;nbsp;&lt;BR&gt;history&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;显示历史命令&amp;nbsp;&lt;BR&gt;hed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;编辑历史调试命令&amp;nbsp;&lt;BR&gt;!&amp;lt;int&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行历史命令流中第int个命令&amp;nbsp;&lt;BR&gt;!-&amp;lt;int&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行历史命令中倒数第int个命令&amp;nbsp;&lt;BR&gt;!&amp;lt;string&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行历史命令流中以string打头的命令&amp;nbsp;&lt;BR&gt;!!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;重复上一个命令&amp;nbsp;&lt;BR&gt;command;command&amp;nbsp;...&amp;nbsp;&amp;nbsp;多调试命令间用";"隔开&amp;nbsp;&lt;BR&gt;step&amp;nbsp;&amp;lt;int&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;向前追踪&amp;lt;int&amp;gt;步,进入线程&amp;nbsp;&lt;BR&gt;next&amp;nbsp;&amp;lt;int&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;向前追踪&amp;lt;int&amp;gt;步,不进入线程&amp;nbsp;&lt;BR&gt;delete&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;清所有断点&amp;nbsp;&lt;BR&gt;listobj&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;列出目前使用的obj单元&amp;nbsp;&lt;BR&gt;listregions&amp;nbsp;&amp;nbsp;&amp;nbsp;列出被用到的内存区&amp;nbsp;&lt;BR&gt;enable&amp;nbsp;&amp;lt;int&amp;gt;/disable&amp;nbsp;&amp;lt;int&amp;gt;&amp;nbsp;恢复/禁用&amp;lt;int&amp;gt;号断点&amp;nbsp;&lt;BR&gt;catch&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;显示所有碰到的记号&amp;nbsp;&lt;BR&gt;cont&amp;nbsp;at&amp;nbsp;&amp;lt;line&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行直到line行&amp;nbsp;&lt;BR&gt;intercept&amp;nbsp;all&amp;nbsp;&amp;nbsp;&amp;nbsp;在所有例外处都中断&amp;nbsp;&lt;BR&gt;bx&amp;nbsp;chat&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在所有出现char打头的异常处中断&amp;nbsp;&lt;BR&gt;kill&amp;nbsp;&amp;lt;pid&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;杀死pid线程&amp;nbsp;&lt;BR&gt;goto&amp;nbsp;&amp;lt;line&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;从line行开始运行&amp;nbsp;&lt;BR&gt;stop&amp;nbsp;&amp;lt;var&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;当var产生变化时中断&amp;nbsp;&lt;BR&gt;stop&amp;nbsp;&amp;lt;proc&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;当进入proc进程时中断&amp;nbsp;&lt;BR&gt;stop&amp;nbsp;[var]&amp;nbsp;[at&amp;nbsp;&amp;lt;line&amp;gt;]&amp;nbsp;if&amp;nbsp;&amp;lt;exp&amp;gt;&amp;nbsp;条件中断&amp;nbsp;&lt;BR&gt;trace&amp;nbsp;&amp;lt;var&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;当var变化时输出其原值和新值&amp;nbsp;&lt;BR&gt;trace&amp;nbsp;&amp;lt;proc&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;当进入进程时打印出母进程和参数&amp;nbsp;&lt;BR&gt;when&amp;nbsp;if&amp;nbsp;&amp;lt;exp&amp;gt;&amp;nbsp;{command_list}&amp;nbsp;当条件为真时执行命令列&amp;nbsp;&lt;BR&gt;when&amp;nbsp;at&amp;nbsp;&amp;lt;line&amp;gt;&amp;nbsp;[if&amp;nbsp;&amp;lt;exp&amp;gt;]&amp;nbsp;{command_list}&amp;nbsp;在遇到line行时如果条件为真执行命令列&amp;nbsp;&lt;BR&gt;duel&amp;nbsp;&amp;lt;exp&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;一种比较好的变量输出方式&amp;nbsp;&lt;BR&gt;printregs&amp;nbsp;&amp;nbsp;&amp;nbsp;输出所有寄存器的值&amp;nbsp;&lt;BR&gt;status&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;当前状态&amp;nbsp;&lt;BR&gt;/&amp;lt;string&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;向下寻找file中的string字符串&amp;nbsp;&lt;BR&gt;?&amp;lt;string&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;向上寻找file中的string字符串&amp;nbsp;&lt;BR&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;设定或显示系统参数值&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/4819.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>好久没写过东东了 </title><link>http://blog.vckbase.com/freedk/archive/2005/03/15/3586.html</link><pubDate>Tue, 15 Mar 2005 04:44:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/03/15/3586.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/3586.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/03/15/3586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/3586.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/3586.html</trackback:ping><description>for unix&lt;BR&gt;&lt;BR&gt;FILE *fp;&lt;BR&gt;fp = popen(&amp;#8221;lpr -P PRINTER&amp;#8221;,&amp;#8221;w&amp;#8221;);&lt;BR&gt;int w_len = r_len*fwrite(buffer,r_len,1fp);&lt;BR&gt;close(fp);&lt;img src ="http://blog.vckbase.com/freedk/aggbug/3586.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>bug修改</title><link>http://blog.vckbase.com/freedk/archive/2005/02/22/3195.html</link><pubDate>Tue, 22 Feb 2005 06:08:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/02/22/3195.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/3195.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/02/22/3195.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/3195.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/3195.html</trackback:ping><description>&lt;P&gt;没有考虑到read的返回值:P&lt;IMG height=20 src="/Emoticons/QQ/02.gif" width=20 border=0&gt;&lt;BR&gt;/*&lt;BR&gt;&amp;nbsp;brief:&amp;nbsp;&amp;nbsp;超时读数据&lt;BR&gt;&amp;nbsp;fd:&amp;nbsp;&amp;nbsp;文件描述述&lt;BR&gt;&amp;nbsp;lpdata:&amp;nbsp;&amp;nbsp;数据指针&lt;BR&gt;&amp;nbsp;timeout:&amp;nbsp;超时值(秒)&lt;BR&gt;&amp;nbsp;len:&amp;nbsp;&amp;nbsp;读数据长度&amp;nbsp;&lt;BR&gt;return:实际读数据长度&lt;BR&gt;*/&lt;BR&gt;int ReadData(int fd,char *lp_out_data,int timeout,int len)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;fd_set rxset;&lt;BR&gt;&amp;nbsp;int z;&lt;BR&gt;&amp;nbsp;int nfds;&lt;BR&gt;int sumlen =0;&lt;BR&gt;&amp;nbsp;struct timeval tv;&lt;BR&gt;&amp;nbsp;char lpdata[RECV_MAX_DATA];&lt;BR&gt;&amp;nbsp;do&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;FD_ZERO(&amp;amp;rxset);&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(fd&amp;gt;=0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FD_SET(fd,&amp;amp;rxset);&lt;BR&gt;&amp;nbsp;&amp;nbsp;nfds = fd+1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;tv.tv_sec=timeout;&lt;BR&gt;&amp;nbsp;&amp;nbsp;tv.tv_usec = 0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;do&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;z = select(nfds,&amp;amp;rxset,0,0,&amp;amp;tv);&lt;BR&gt;&amp;nbsp;&amp;nbsp;}while(z==-1&amp;amp;&amp;amp;errno==EINTR);&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(z == -1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("select(2)\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(z == 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("timeout\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;fd = -1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;if(fd&amp;gt;=0&amp;amp;&amp;amp;FD_ISSET(fd,&amp;amp;rxset))&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(lpdata,0,sizeof(lpdata));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (len &amp;gt; RECV_MAX_DATA)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;len = RECV_MAX_DATA;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;z = read(fd,lpdata,len);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(z == -1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("read(2) of fd\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fd = -1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(z &amp;gt;0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sumlen = sumlen+z;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpdata[z]=0;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcat(lp_out_data,lpdata);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("read %d bytes &amp;lt;&amp;lt;%02x&amp;gt;&amp;gt; from fd;\n",z,lpdata[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("read EOF from fd;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fd = -1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}while (fd&amp;gt;=0);&lt;BR&gt;return sumlen;&lt;/P&gt;
&lt;P&gt;}&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/freedk/aggbug/3195.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>unix下超时读串口（linux下没有测试，但估计原理一样）</title><link>http://blog.vckbase.com/freedk/archive/2005/02/01/2962.html</link><pubDate>Tue, 01 Feb 2005 15:50:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/02/01/2962.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/2962.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/02/01/2962.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/2962.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/2962.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/freedk/aggbug/2962.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>转：创建UNIX后门</title><link>http://blog.vckbase.com/freedk/archive/2005/01/07/2464.html</link><pubDate>Thu, 06 Jan 2005 21:56:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/01/07/2464.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/2464.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/01/07/2464.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/2464.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/2464.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/freedk/aggbug/2464.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>自由空间</dc:creator><title>介绍一个ftp命令</title><link>http://blog.vckbase.com/freedk/archive/2005/01/05/2445.html</link><pubDate>Wed, 05 Jan 2005 14:41:00 GMT</pubDate><guid>http://blog.vckbase.com/freedk/archive/2005/01/05/2445.html</guid><wfw:comment>http://blog.vckbase.com/freedk/comments/2445.html</wfw:comment><comments>http://blog.vckbase.com/freedk/archive/2005/01/05/2445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/freedk/comments/commentRss/2445.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/freedk/services/trackbacks/2445.html</trackback:ping><description>&lt;img src ="http://blog.vckbase.com/freedk/aggbug/2445.html" width = "1" height = "1" /&gt;</description></item></channel></rss>