<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/css" href="./clientscript/vbulletin_css/rsstyle.css"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>LinuxSir.Org - Linux 程序设计专题讨论</title>
		<link>http://www.linuxsir.org/bbs</link>
		<description>Linux环境综合程序设计讨论区；欢迎弟兄们加入版主之列！</description>
		<language>zh</language>
		<lastBuildDate>Tue, 09 Feb 2010 13:20:41 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://www.linuxsir.org/bbs/images/misc/rss.jpg</url>
			<title>LinuxSir.Org - Linux 程序设计专题讨论</title>
			<link>http://www.linuxsir.org/bbs</link>
		</image>
		<item>
			<title>union结果为什麽不一样</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363673&amp;goto=newpost</link>
			<pubDate>Mon, 08 Feb 2010 04:39:02 GMT</pubDate>
			<description><![CDATA[a和b是把ip地址转为整数。只是t1,t2,t3,t4的赋值顺序不通。 
执行a和b后，输入相同的值，结果缺不通，a是正确的。 
输入0.0.1.0结果应为256 

vi a.c 
union trans { 
unsigned int i; 
unsigned char c[4]; 
}; 
main() { 
union trans t; 
unsigned char t1,t2,t3,t4; 

        scanf("%d.%d.%d.%d",&t4,&t3,&t2,&t1); 
        t.c[3]=t4; 
        t.c[2]=t3; 
        t.c[1]=t2; 
        t.c[0]=t1; 
        printf("int is %d\n",t.i); 
} 

vi b.c 
union trans { 
        unsigned int i; 
        unsigned char c[4]; 
}; 

main() { 
        union trans t; 
        unsigned char t1,t2,t3,t4; 
        printf("input ip: "); 
        
        scanf("%d.%d.%d.%d",&t1,&t2,&t3,&t4); 
        t.c[3]=t4;              
        t.c[2]=t3; 
        t.c[1]=t2;      
        t.c[0]=t1; 
  
        printf("int is %d\n",t.i); 
}　　　　　　]]></description>
			<content:encoded><![CDATA[<div>a和b是把ip地址转为整数。只是t1,t2,t3,t4的赋值顺序不通。 <br />
执行a和b后，输入相同的值，结果缺不通，a是正确的。 <br />
输入0.0.1.0结果应为256 <br />
<br />
vi a.c <br />
union trans { <br />
unsigned int i; <br />
unsigned char c[4]; <br />
}; <br />
main() { <br />
union trans t; <br />
unsigned char t1,t2,t3,t4; <br />
<br />
        scanf(&quot;%d.%d.%d.%d&quot;,&amp;t4,&amp;t3,&amp;t2,&amp;t1); <br />
        t.c[3]=t4; <br />
        t.c[2]=t3; <br />
        t.c[1]=t2; <br />
        t.c[0]=t1; <br />
        printf(&quot;int is %d\n&quot;,t.i); <br />
} <br />
<br />
vi b.c <br />
union trans { <br />
        unsigned int i; <br />
        unsigned char c[4]; <br />
}; <br />
<br />
main() { <br />
        union trans t; <br />
        unsigned char t1,t2,t3,t4; <br />
        printf(&quot;input ip: &quot;); <br />
        <br />
        scanf(&quot;%d.%d.%d.%d&quot;,&amp;t1,&amp;t2,&amp;t3,&amp;t4); <br />
        t.c[3]=t4;              <br />
        t.c[2]=t3; <br />
        t.c[1]=t2;      <br />
        t.c[0]=t1; <br />
  <br />
        printf(&quot;int is %d\n&quot;,t.i); <br />
}　　　　　　</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>ccjsj1</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363673</guid>
		</item>
		<item>
			<title>setjmp()和longjmp()怎么不起作用的。</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363628&amp;goto=newpost</link>
			<pubDate>Sun, 07 Feb 2010 00:55:27 GMT</pubDate>
			<description><![CDATA[代码:
#include   "apue.h"
#include   <setjmp.h>

static void   f1(int, int, int);
static void   f2(void);

static jmp_buf   jmpbuffer;

int
main(void)
{
   int            count;
   register int   val;
   volatile int   sum;

   count = 2; val = 3; sum = 4;
   if (setjmp(jmpbuffer) != 0) //返回0表示已经储存好当前的堆栈环境，非0值表示由longjmp跳跃回来
   {
      printf("after longjmp: count = %d, val = %d, sum = %d\n",count, val, sum);
      exit(0);
   }
   count = 97; val = 98; sum = 99;
            /* changed after setjmp, before longjmp */
   f1(count, val, sum);      /* never returns */
}

static void
f1(int i, int j, int k)
{
   printf("in f1(): count = %d, val = %d, sum = %d\n", i, j, k);
   f2();
}

static void
f2(void)
{
   longjmp(jmpbuffer, 1);//void longjmp(jmp_buf env, int val);
}
/*
   val参数提供了setjmp()的返回值，这个值不能为0，如果为0，系统会用1来代替。
*/

这个东西，先把变量设置成234，然后用setjmp储存，然后改成97.98.99，打印，然后再返回到setjmp那里，再打印，。

按道理来说应该先打印97.98.99再打印2.3.4的。
但是

lucifer@LovelyBaby:~/CC/Unix$ cc testjmp.c
lucifer@LovelyBaby:~/CC/Unix$ ./a.out
in f1(): count = 97, val = 98, sum = 99
after longjmp: count = 97, val = 98, sum = 99
lucifer@LovelyBaby:~/CC/Unix$

我又哪里错了阿？]]></description>
			<content:encoded><![CDATA[<div>代码:<br />
#include   &quot;apue.h&quot;<br />
#include   &lt;setjmp.h&gt;<br />
<br />
static void   f1(int, int, int);<br />
static void   f2(void);<br />
<br />
static jmp_buf   jmpbuffer;<br />
<br />
int<br />
main(void)<br />
{<br />
   int            count;<br />
   register int   val;<br />
   volatile int   sum;<br />
<br />
   count = 2; val = 3; sum = 4;<br />
   if (setjmp(jmpbuffer) != 0) //返回0表示已经储存好当前的堆栈环境，非0值表示由longjmp跳跃回来<br />
   {<br />
      printf(&quot;after longjmp: count = %d, val = %d, sum = %d\n&quot;,count, val, sum);<br />
      exit(0);<br />
   }<br />
   count = 97; val = 98; sum = 99;<br />
            /* changed after setjmp, before longjmp */<br />
   f1(count, val, sum);      /* never returns */<br />
}<br />
<br />
static void<br />
f1(int i, int j, int k)<br />
{<br />
   printf(&quot;in f1(): count = %d, val = %d, sum = %d\n&quot;, i, j, k);<br />
   f2();<br />
}<br />
<br />
static void<br />
f2(void)<br />
{<br />
   longjmp(jmpbuffer, 1);//void longjmp(jmp_buf env, int val);<br />
}<br />
/*<br />
   val参数提供了setjmp()的返回值，这个值不能为0，如果为0，系统会用1来代替。<br />
*/<br />
<br />
这个东西，先把变量设置成234，然后用setjmp储存，然后改成97.98.99，打印，然后再返回到setjmp那里，再打印，。<br />
<br />
按道理来说应该先打印97.98.99再打印2.3.4的。<br />
但是<br />
<br />
lucifer@LovelyBaby:~/CC/Unix$ cc testjmp.c<br />
lucifer@LovelyBaby:~/CC/Unix$ ./a.out<br />
in f1(): count = 97, val = 98, sum = 99<br />
after longjmp: count = 97, val = 98, sum = 99<br />
lucifer@LovelyBaby:~/CC/Unix$<br />
<br />
我又哪里错了阿？</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>13025700481</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363628</guid>
		</item>
		<item>
			<title>最近在学习GTK，想找个师傅</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363624&amp;goto=newpost</link>
			<pubDate>Sat, 06 Feb 2010 16:32:57 GMT</pubDate>
			<description>从初中开始学电脑一直是自学，从Q-basic到pasicl,再到VB。现在是C。除了大学阶段C语言有老师教一点之外，基本上是自学（PS：教C语言老头要顾及没有基础的学生，讲得很慢，而且深层次的东西不会讲）。
现在希望找一个师傅，能带我学一下GTK。平时不会太麻烦您，只要您有空能解答一下我的问题就行。找QQ群加基本是吹牛。论坛上发帖子半天没人响应。杯具。
不一定是高手，大家互相进步，互相学习也可。当然，有高手更好了。呵呵。谢谢</description>
			<content:encoded><![CDATA[<div>从初中开始学电脑一直是自学，从Q-basic到pasicl,再到VB。现在是C。除了大学阶段C语言有老师教一点之外，基本上是自学（PS：教C语言老头要顾及没有基础的学生，讲得很慢，而且深层次的东西不会讲）。<br />
现在希望找一个师傅，能带我学一下GTK。平时不会太麻烦您，只要您有空能解答一下我的问题就行。找QQ群加基本是吹牛。论坛上发帖子半天没人响应。杯具。<br />
不一定是高手，大家互相进步，互相学习也可。当然，有高手更好了。呵呵。谢谢</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>moryaomei</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363624</guid>
		</item>
		<item>
			<title>大虾请进：void value not ignored as it ought to be, in C?</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363599&amp;goto=newpost</link>
			<pubDate>Fri, 05 Feb 2010 15:41:20 GMT</pubDate>
			<description><![CDATA[#include <iostream>

#define debug(expr) (void(0))


int main(int argc, char *argv[])
{
    debug(expr)(true); //出错的地方
    return 0;
}

编译时报的错如下：
g++ main.cpp
main.cpp: In function 'int main(int, char**)':
main.cpp:8: error: void value not ignored as it ought to be

以前常用这种方式去掉release版中的相应函数，现在编译不过去了。我的g++版本:gcc version 4.1.2 (Gentoo 4.1.2 p1.0.2)]]></description>
			<content:encoded><![CDATA[<div>#include &lt;iostream&gt;<br />
<br />
#define debug(expr) (void(0))<br />
<br />
<br />
int main(int argc, char *argv[])<br />
{<br />
    debug(expr)(true); //出错的地方<br />
    return 0;<br />
}<br />
<br />
编译时报的错如下：<br />
g++ main.cpp<br />
main.cpp: In function 'int main(int, char**)':<br />
main.cpp:8: error: void value not ignored as it ought to be<br />
<br />
以前常用这种方式去掉release版中的相应函数，现在编译不过去了。我的g++版本:gcc version 4.1.2 (Gentoo 4.1.2 p1.0.2)</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>hcj116</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363599</guid>
		</item>
		<item>
			<title>请教各位高手，我想查找某一目录下某一文件是否存在，而且该文件生成日期大于date显示的时间</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363544&amp;goto=newpost</link>
			<pubDate>Thu, 04 Feb 2010 07:22:32 GMT</pubDate>
			<description>查找某一目录下某一文件是否存在，而且该文件生成日期大于date显示的时间，请问在LINUX里面应该怎么写程序啊？我的系统是REDHAT的！谢谢！！！急</description>
			<content:encoded><![CDATA[<div>查找某一目录下某一文件是否存在，而且该文件生成日期大于date显示的时间，请问在LINUX里面应该怎么写程序啊？我的系统是REDHAT的！谢谢！！！急</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>rebecca822</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363544</guid>
		</item>
		<item>
			<title>迷糊的问题：堆栈</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363462&amp;goto=newpost</link>
			<pubDate>Tue, 02 Feb 2010 02:14:41 GMT</pubDate>
			<description><![CDATA[问题一：

"在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示 overflow。"
(原文地址：http://user.qzone.qq.com/710428143/blog/1265025287）
这句话，编译程序的时候就指定了程序的栈的大小和在内存的硬地址。内存的硬地址，有那么多的程序，硬地址会不会不够用？而且栈需要连续的空间。栈到底是什么，怎么来的？一块连续的内存空间，在问题二中引用的话中，栈是要放参数的。既然栈用来放参数了，那堆要来干什么？

问题二：
“栈（stack）:在函数调用时，第一个进栈的是主函数中子函数调用后的下一条指令（子函数调用语句的下一条可执行语句）的地址，然后是子函数的各个形参。”
（原文地址：http://user.qzone.qq.com/710428143/blog/1265025287）
我也是这么想的，因为子函数的返回地址要先入栈，按照栈的出入栈的顺序，应该返回地址要先入栈，然后返回地址要最后一个出栈。
上面引用的这句话说的是语句的地址，而下面引用的这句话却说是内容？说明：指令寄存器保存着下一条要执行的语句。
但是
“当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。”
（原文地址：http://user.qzone.qq.com/710428143/blog/1265018813）
这里却说是参数第一个入栈。？
（百度谷歌“入栈顺序”只能得到顺序是从右到左。）






文章越看越迷糊。


穷乡僻壤，可恶，C语言的书都没有哪去找汇编的书吖。

想念广州，只要去天河购书中心就行了。]]></description>
			<content:encoded><![CDATA[<div>问题一：<br />
<br />
&quot;在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示 overflow。&quot;<br />
(原文地址：<a href="http://user.qzone.qq.com/710428143/blog/1265025287）" target="_blank">http://user.qzone.qq.com/710428143/blog/1265025287）</a><br />
这句话，编译程序的时候就指定了程序的栈的大小和在内存的硬地址。内存的硬地址，有那么多的程序，硬地址会不会不够用？而且栈需要连续的空间。栈到底是什么，怎么来的？一块连续的内存空间，在问题二中引用的话中，栈是要放参数的。既然栈用来放参数了，那堆要来干什么？<br />
<br />
问题二：<br />
“栈（stack）:在函数调用时，第一个进栈的是主函数中子函数调用后的下一条指令（子函数调用语句的下一条可执行语句）的地址，然后是子函数的各个形参。”<br />
（原文地址：<a href="http://user.qzone.qq.com/710428143/blog/1265025287）" target="_blank">http://user.qzone.qq.com/710428143/blog/1265025287）</a><br />
我也是这么想的，因为子函数的返回地址要先入栈，按照栈的出入栈的顺序，应该返回地址要先入栈，然后返回地址要最后一个出栈。<br />
上面引用的这句话说的是语句的地址，而下面引用的这句话却说是内容？说明：指令寄存器保存着下一条要执行的语句。<br />
但是<br />
“当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。”<br />
（原文地址：<a href="http://user.qzone.qq.com/710428143/blog/1265018813）" target="_blank">http://user.qzone.qq.com/710428143/blog/1265018813）</a><br />
这里却说是参数第一个入栈。？<br />
（百度谷歌“入栈顺序”只能得到顺序是从右到左。）<br />
<br />
<br />
<br />
<br />
<br />
<br />
文章越看越迷糊。<br />
<br />
<br />
穷乡僻壤，可恶，C语言的书都没有哪去找汇编的书吖。<br />
<br />
想念广州，只要去天河购书中心就行了。</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>13025700481</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363462</guid>
		</item>
		<item>
			<title>使用XgrabKey获取键盘事件报错</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363427&amp;goto=newpost</link>
			<pubDate>Mon, 01 Feb 2010 07:23:32 GMT</pubDate>
			<description><![CDATA[我想使用XgrabKey来拦截某个键盘事件，比如：按 F9
现在发现程序运行报 BadAccess 的错，可能是系统中存在别的软件拦截过F9了？？有办法知道是什么软件么？或者怎么才能正常的拦截 F9呢？

void
grab_keys (Display * display)
{
		int i;
	int min, max;
	int screen;
	unsigned int modifier = 0;
	// modifier |= Mod2Mask; 使用这个则不报错
	modifier = AnyModifier;
		
	for (screen = 0; screen < ScreenCount (display); screen++)
	{
		// grab 'F9' of all screen 
		KeyCode F9;
		F9 = XKeysymToKeycode (display, XStringToKeysym ("F9"));
		XGrabKey (display, F9, modifier, RootWindow (display, screen),
		          True, GrabModeAsync, GrabModeAsync);
	}

}]]></description>
			<content:encoded><![CDATA[<div>我想使用XgrabKey来拦截某个键盘事件，比如：按 F9<br />
现在发现程序运行报 BadAccess 的错，可能是系统中存在别的软件拦截过F9了？？有办法知道是什么软件么？或者怎么才能正常的拦截 F9呢？<br />
<br />
void<br />
grab_keys (Display * display)<br />
{<br />
		int i;<br />
	int min, max;<br />
	int screen;<br />
	unsigned int modifier = 0;<br />
	// modifier |= Mod2Mask; 使用这个则不报错<br />
	modifier = AnyModifier;<br />
		<br />
	for (screen = 0; screen &lt; ScreenCount (display); screen++)<br />
	{<br />
		// grab 'F9' of all screen <br />
		KeyCode F9;<br />
		F9 = XKeysymToKeycode (display, XStringToKeysym (&quot;F9&quot;));<br />
		XGrabKey (display, F9, modifier, RootWindow (display, screen),<br />
		          True, GrabModeAsync, GrabModeAsync);<br />
	}<br />
<br />
}</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>jyoxun</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363427</guid>
		</item>
		<item>
			<title>制造缓冲区溢出的问题。</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363410&amp;goto=newpost</link>
			<pubDate>Mon, 01 Feb 2010 00:27:14 GMT</pubDate>
			<description><![CDATA[一个程序在内存中通常分为程序段、数据段和堆栈三部分。程序段里放着程序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中，它们的位置是：
（图一）
当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。以下面程序为例：
 
example2.c
void func1(char * input) {
char buffer[16]; 
strcpy(buffer, input);
}  
void main() {
  char longstring[256];
  int i; 
  for( i = 0; i < 255; i++)
    longstring [i] = 'B'; 
  func1(longstring);
}
 
      当调用函数func1()时，堆栈如下：
（图二）
  不用说，程序执行的结果是"Segmentation fault (core dumped)"或类似的出错信息。因为从buffer开始的256个字节都将被* input的内容'B'覆盖，包括sfp, ret,甚至*input。'B'的16进值为0x41，所以函数的返回地址变成了0x41414141，这超出了程序的地址空间，所以出现段错误。 



我对这段话
“当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。”
和这段话
“因为从buffer开始的256个字节都将被* input的内容'B'覆盖，包括sfp, ret,甚至*input。'B'的16进值为0x41，所以函数的返回地址变成了0x41414141”

看不懂。求教，谢谢。。
下面第一副图是图一，第二副是图二。]]></description>
			<content:encoded><![CDATA[<div>一个程序在内存中通常分为程序段、数据段和堆栈三部分。程序段里放着程序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中，它们的位置是：<br />
（图一）<br />
当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。以下面程序为例：<br />
 <br />
example2.c<br />
void func1(char * input) {<br />
char buffer[16]; <br />
strcpy(buffer, input);<br />
}  <br />
void main() {<br />
  char longstring[256];<br />
  int i; <br />
  for( i = 0; i &lt; 255; i++)<br />
    longstring [i] = 'B'; <br />
  func1(longstring);<br />
}<br />
 <br />
      当调用函数func1()时，堆栈如下：<br />
（图二）<br />
  不用说，程序执行的结果是&quot;Segmentation fault (core dumped)&quot;或类似的出错信息。因为从buffer开始的256个字节都将被* input的内容'B'覆盖，包括sfp, ret,甚至*input。'B'的16进值为0x41，所以函数的返回地址变成了0x41414141，这超出了程序的地址空间，所以出现段错误。 <br />
<br />
<br />
<br />
我对这段话<br />
“当程序中发生函数调用时，计算机做如下操作：首先把参数压入堆栈；然后保存指令寄存器(IP)中的内容作为返回地址(RET)；第三个放入堆栈的是基址寄存器(FP)；然后把当前的栈指针(SP)拷贝到FP，做为新的基地址；最后为本地变量留出一定空间，把SP减去适当的数值。”<br />
和这段话<br />
“因为从buffer开始的256个字节都将被* input的内容'B'覆盖，包括sfp, ret,甚至*input。'B'的16进值为0x41，所以函数的返回地址变成了0x41414141”<br />
<br />
看不懂。求教，谢谢。。<br />
下面第一副图是图一，第二副是图二。</div>


	<br />
	<div style="padding:4px">
	
	

	
	
	
		<fieldset class="fieldset">
			<legend>上传的图像</legend>
			<table cellpadding="0" cellspacing="1" border="0">
			<tr>
	<td><img class="inlineimg" src="http://www.linuxsir.org/bbs/images/attach/gif.gif" alt="文件类型: gif" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
 <!-- PHPForce - Joey修改附件隐藏 -->
 	
 	<td><a href="http://www.linuxsir.org/bbs/attachment.php?attachmentid=54606&amp;d=1264983941" target="_blank">图一.gif</a> (1.1 KB, 无 次查看)

</td>
 	
 <!-- /PHPForce - Joey修改附件隐藏 -->


 </tr><tr>
	<td><img class="inlineimg" src="http://www.linuxsir.org/bbs/images/attach/gif.gif" alt="文件类型: gif" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
 <!-- PHPForce - Joey修改附件隐藏 -->
 	
 	<td><a href="http://www.linuxsir.org/bbs/attachment.php?attachmentid=54607&amp;d=1264983941" target="_blank">图二.gif</a> (1.4 KB, 无 次查看)

</td>
 	
 <!-- /PHPForce - Joey修改附件隐藏 -->


 </tr>
			</table>
			</fieldset>
	
	
	
	
	</div>
]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>13025700481</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363410</guid>
		</item>
		<item>
			<title>如何解答APUE2里的3.2练习题？</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363163&amp;goto=newpost</link>
			<pubDate>Wed, 27 Jan 2010 14:24:20 GMT</pubDate>
			<description><![CDATA[Write your own dup2 function that performs the same service as the dup2 function described in Section 3.12, without calling the fcntl function. Be sure to handle errors correctly.
我想用open("/dev/fd/n",mode)；但不知道如何指定描述符像dup2一样？]]></description>
			<content:encoded><![CDATA[<div>Write your own dup2 function that performs the same service as the dup2 function described in Section 3.12, without calling the fcntl function. Be sure to handle errors correctly.<br />
我想用open(&quot;/dev/fd/n&quot;,mode)；但不知道如何指定描述符像dup2一样？</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>pdaliu</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363163</guid>
		</item>
		<item>
			<title>寻linux平台下的GUI自动化测试工具</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=363084&amp;goto=newpost</link>
			<pubDate>Mon, 18 Jan 2010 09:39:22 GMT</pubDate>
			<description>希望可以兼容QT和GTK开发的程序。</description>
			<content:encoded><![CDATA[<div>希望可以兼容QT和GTK开发的程序。</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>tsuibin</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=363084</guid>
		</item>
		<item>
			<title>请问最合理的判断浮点数为零的语句。</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=362989&amp;goto=newpost</link>
			<pubDate>Sat, 16 Jan 2010 14:04:17 GMT</pubDate>
			<description>请教判断float(double)变量是否为零值的方法。
大家常用哪些方法，有何优缺点？
谢谢！</description>
			<content:encoded><![CDATA[<div>请教判断float(double)变量是否为零值的方法。<br />
大家常用哪些方法，有何优缺点？<br />
谢谢！</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>puma1800</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=362989</guid>
		</item>
		<item>
			<title>应用程序编译时依赖问题</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=362925&amp;goto=newpost</link>
			<pubDate>Fri, 15 Jan 2010 02:18:03 GMT</pubDate>
			<description>1.对于一个应用程序，从源码编译时，会依赖操作系统的一些东西（一些包、文件、目录等），我怎样才能够获得这些依赖的信息，有没有什么方法？</description>
			<content:encoded><![CDATA[<div>1.对于一个应用程序，从源码编译时，会依赖操作系统的一些东西（一些包、文件、目录等），我怎样才能够获得这些依赖的信息，有没有什么方法？</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>linuxboys</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=362925</guid>
		</item>
		<item>
			<title>C语言中屏幕输出的一个问题</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=362916&amp;goto=newpost</link>
			<pubDate>Thu, 14 Jan 2010 13:32:40 GMT</pubDate>
			<description>我在命令行模式下编程，想让程序运行时在屏幕中能够不断显示一个变化的值，而这个值的位置是固定的。比如
显示内容为：    Time is：12：33：12
如何能够让前面的字符串不变，只有后面的时间内容会变，而且在屏幕上只输出一行内容，不会每次输出一行，重复输出Time is这样的内容。
不知道这样的效果能不能实现呢？</description>
			<content:encoded><![CDATA[<div>我在命令行模式下编程，想让程序运行时在屏幕中能够不断显示一个变化的值，而这个值的位置是固定的。比如<br />
显示内容为：    Time is：12：33：12<br />
如何能够让前面的字符串不变，只有后面的时间内容会变，而且在屏幕上只输出一行内容，不会每次输出一行，重复输出Time is这样的内容。<br />
不知道这样的效果能不能实现呢？</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>xuyaosong</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=362916</guid>
		</item>
		<item>
			<title><![CDATA[[请教]通过利用多个Internet出口进行网络下载来加速文件传输]]></title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=362830&amp;goto=newpost</link>
			<pubDate>Tue, 12 Jan 2010 13:24:50 GMT</pubDate>
			<description>假设一个局网内有多个独立的Internet出口（比如同时存在一个电信出口的网关，一个网通出口的网关，一个教育网出口的网关，同时连通），如何进行配置或者程序设计来充分利用这些独立的网络通道，以加速数据传输？当然假设数据服务端的带宽是足够的。</description>
			<content:encoded><![CDATA[<div>假设一个局网内有多个独立的Internet出口（比如同时存在一个电信出口的网关，一个网通出口的网关，一个教育网出口的网关，同时连通），如何进行配置或者程序设计来充分利用这些独立的网络通道，以加速数据传输？当然假设数据服务端的带宽是足够的。</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>linux001</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=362830</guid>
		</item>
		<item>
			<title>内存对齐的问题</title>
			<link>http://www.linuxsir.org/bbs/showthread.php?t=362790&amp;goto=newpost</link>
			<pubDate>Mon, 11 Jan 2010 13:21:23 GMT</pubDate>
			<description><![CDATA[
代码:
---------
align(4) unsigned int  i_v;
align(4) unsigned int  i_a[100]
---------
第一个声明表示变量i_v的内存地址必须能被4整除或4的倍数，那么第二个对齐的数组什么意思呢？
我认为第二种对数组的对齐声明表示在该数组中，内存的一次读写按照4个byte进行的，就是说
该数组的一次读取的是4个字节，而不是说该数组的首地址是4字节的对齐的。
再者

代码:
---------
typedef  packed struct
{
  uint32 a;
  uint32 b;
  char    c;
  long    d;
}DT_X;

align(2) DT_X dt_v;
---------
是不是有些多余？]]></description>
			<content:encoded><![CDATA[<div><div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">代码:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">align(4) unsigned int&nbsp; i_v;<br />
align(4) unsigned int&nbsp; i_a[100]</code><hr />
</div>第一个声明表示变量i_v的内存地址必须能被4整除或4的倍数，那么第二个对齐的数组什么意思呢？<br />
我认为第二种对数组的对齐声明表示在该数组中，内存的一次读写按照4个byte进行的，就是说<br />
该数组的一次读取的是4个字节，而不是说该数组的首地址是4字节的对齐的。<br />
再者<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">代码:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">typedef&nbsp; packed struct<br />
{<br />
&nbsp; uint32 a;<br />
&nbsp; uint32 b;<br />
&nbsp; char&nbsp; &nbsp; c;<br />
&nbsp; long&nbsp; &nbsp; d;<br />
}DT_X;<br />
<br />
align(2) DT_X dt_v;</code><hr />
</div>是不是有些多余？</div>

]]></content:encoded>
			<category domain="http://www.linuxsir.org/bbs/forumdisplay.php?f=76">Linux 程序设计专题讨论</category>
			<dc:creator>sybaselu</dc:creator>
			<guid isPermaLink="true">http://www.linuxsir.org/bbs/showthread.php?t=362790</guid>
		</item>
	</channel>
</rss>
