博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

哥德巴赫猜想

达则兼济天下,穷则独善其身。
  Godbach.cublog.cn

关于作者
姓名:Godbach
职业:
年龄:
位置:
个性介绍:A loser!
|| << >> ||
我的分类


《UNIX环境高级编程》源码编译方法
  最近在学习《UNIX环境高级编程》(Advanced Programming in the UNIX Environment, 简称APUE,以下使用简称)。该书的作者是W.Richard.Stevens,国际知名的UNIX和网络专家。我看的是该书的第一版,尤晋元翻译的。 网上有的评论该书翻译的比较差劲,有的说还行。我个人觉得,这本书的翻译还可以。并且,如果本身就有一定的UNIX/Linux基础的话,读起来应该不是 很吃力。同时我也下了该书的第二版(英文版),有什么看不懂的地方,再对照英文版看一下,辅助理解。
   这里要谈到的一个问题就是该书中的源代码编译的问题。此书中差不多每个历程中,都会有这样一行源码:
#include "ourhdr.h"
  
在第二版中改为:
#include "apue.h"

    这个头文件是作者把把每个例程中常用的标准头文件,一些常用的出错处理函数(err_**()之类的函数)和一些常用的宏定义给整理在一个头文件中。这个 可以省去在每个例程中录入较多的重复代码,这样可以减少每个例程的长度。但是,这样就给读者带来了不少麻烦。因为我们还要去搞明白如和把这个头文件编译, 然后做成库文件,添加到我们的系统中。特别读于初学者,本来满怀信心的,结果在编译第一个程序的时候就出现了问题。我也没有搞明白如何把 "ourhdr.h"静态的编译到系统中。

    不过,不明白如何使用"ourhdr.h"这个头文件,并不会影响我们学习APUE,也不会影响我们编译和运行每一个例程。其实,简单的想一下,如果一个 C程序要能顺利的编译和运行,除了我们要语法正确等方面外,最根本的是要保证我们程序中所调用的函数以及宏等等都要有完整的来源,也就是必须包含所有调用 函数和宏所在的头文件。对于一个具体的源程序,如果我们正确的包含了头文件,那么剩下的就是程序本生语法方面应该注意的事项。

    如何确定系统调用函数包含在那个头文件中呢?这在Unix/Linux系统下并非一件难事。Unix/Linux下命令man可以帮助我们找到。man命 令不仅可以帮助我们查找一般命令的用法,同时提供不同层次的帮助诸如系统调用或者管理员级别的命令等等(譬如FreeBSD6.1中,man 1是用户专用手册,man 2是系统调用,man 3是库函数查询等等)。

    下面我们就以APUE书中程序1-1 (实现ls命令部分功能)为例,来说明如何将书中的程序改编成全部使用标准头文件的程序。其中,操作系统用的是FreeBSD6.1,经过相应的修改可以 在书中所说的几个Unix系统及Linux系统中运行,我也曾在Debian Linux下成功编译和运行该程序。书中1-1.c的原始代码如下:

#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"

int
main(int argc, char *argv[])
{
    DIR                *dp;
    struct dirent    *dirp;

    if (argc != 2)
        err_quit("usage: ls directory_name");

    if ((dp = opendir(argv[1])) == NULL)
        err_sys("can't open %s", argv[1]);
    while ((dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);

    closedir(dp);
    exit(0);
}

    从书后面的附录中可以看到"ourhdr.h"的内容比较多,包含了比较多的常用头文件,一些宏定义和一些常用函数和出错函数的定义。其实,对于每一个具体的程序,我们只需要找到该程序中用到的头文件即可。

    该1-1.c中所用到的系统函数调用有:opnedir(),readdir(),printf(),closedir()和exit()。
其中,对于常用的函数prinft()和exit(),它们所在的头文件一般都知道,分别是<stdio.h>和<stdlib.h>。而对于
opnedir (),readdir()和closedir(),我们可以通过man opendir,man readdir,man closedir得到这三个关于目录操作的函数所在的头文件都是:<sys/types.h>和<dirent.h>。这两个头 文件在源程序中也已经列出。

    其次,1-1.c中还用到了作者自定义的两个函数:err_quit()和err_sys()。这两个函数主要使用来进行出错处理的。当然,使用这两个函 数对错误信息的处理是比较完善的。但是,作为我们学习来讲,了解程序的核心功能是首要的,我们可以将出错处理简化一点,即当遇到错误的时候,我们只简单的 使用printf()函数来提示一下有错误发生。当然,用printf()来进行出错处理并不是一种很合理的方法,而且往往我们看不到更关键的错误信息, 但对于我们仅仅作为学习来用还是可以接受的。毕竟我们要理解的核心部分是程序的功能实现,出错处理在于其次。

   通过以上的说明,我们可以将1-1.c修改为如下内容:

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    DIR *dp;
    struct dirent *dirp;
   
    if(argc != 2)
    {
        printf("You need input the directory name.\n");
        exit(1);  
    }
   
    if((dp = opendir(argv[1])) == NULL)
    {
        printf("cannot open %s\n", argv[1]);
        exit(1);   

    }

    while ((dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);


    closedir(dp);

    exit(0);
}

    这样修改后的程序已经与作者的头文件"ourhdr.h"没有关系,可以单独的进行编译。我使用的是root用户,执行命令:

# gcc 1-1.c  //生成目标文件a.out
或者
# gcc -o 1-1 1-1.c  //生成目标文件1-1

    没有任何错误和警告,说明编译成功。这时我们执行生成的目标文件:

# ./a.out /home
或者
# ./1-1 /home

    则会列出/home路径下的所有文件,包括目录(.)和(..)。

    通过这样的方法,基本上我们可以将该书中所有的例程修改成不包含"ourhdr.h"的程序。这样,我们就可以单独的编译每一个例程,而不用顾及作者所给 的杂凑的头文件。同时这种比较笨的方法,反而有利于帮助我们了解不同系统调用所对应的头文件,对于学习来说,这应该是一件好事。

    现在,我也才学到APUE的第四章了。前四章的程序,我都是采用这种方法进行编译和运行。如果也有在学习APUE的朋友,我们可以一起交流。

发表于: 2007-03-09,修改于: 2008-10-29 10:40,已浏览4387次,有评论20条 推荐 投诉


网友评论
网友: 本站网友 时间:2007-03-12 22:34:39 IP地址:61.187.112.★
我也是以前看的时候把那些出错处理什么的都改一下,然后就可以跑了。按照README写的那些东西好象也可以编译那些代码。可是makefile那些东东好麻烦的,不知道兄弟你弄明白没?

网友: Godbach 时间:2007-03-13 08:25:02 IP地址:166.111.52.★
好的,我试一下如何用Make编译所有代码。

网友: 本站网友 时间:2007-03-13 09:51:18 IP地址:211.91.133.★
#include "../include/apue.h"

我基本都是这样改一下头文件的位置就可以正常编译了

网友: Godbach 时间:2007-03-13 10:45:28 IP地址:166.111.52.★
多谢这位网友的提醒,不过,那应该是在每一个源程序种都加上这样的头文件吧。并且,应该还是得把所有的都编译了之后吧。不然的话,头文件中还有作者的函数,能否顺利调用?

网友: 本站网友 时间:2007-03-13 11:24:31 IP地址:61.48.222.★
刚刚在FreeBSD下,实验了一下。如果需要单个编译文件的话,首先需要将整个源代码make,然后会在include文件夹里生成一个库文本libapue.a.
这样,将每个单独程序的#include "apue.h"改为当前apue.h所在的位置,该头文件位于当前目录下include/apue.h,即:#include "inlcdue/apue.h"
同时,在编译单个文件时,应该把库文件的路径也加上,即:
#gcc sourcefile.c ./lib/apue.h

网友: Godbach 时间:2007-03-13 11:26:17 IP地址:61.48.222.★
呵呵,不好意思,最后一行写错了,应该是
#gcc sourcefile.c ./lib/libapue.a

网友: 本站网友 时间:2007-03-13 12:01:50 IP地址:211.91.133.★
应该是:
gcc sourcefile.c ../lib/libapue.a


readme:
...
To build the source, edit the Make.defines.* file for your system and set
WKDIR to the pathname of the tree containing the source code.  Then just
run "make"
....

先修改Make.defines.* 的WKDIR ,再make 即可

网友: herolf 时间:2007-03-13 18:37:16 IP地址:61.187.112.★
我在LINUX下试了一下,将源代码解压到目录/soft/apue.2e然后将WKDIR配置为/soft/apue.2e,然后执行make,可是最后系统显示如下的错误:
main.c: In function `main':
main.c:39: warning: control reaches end of non-void function
print.c: In function `submit_file':
print.c:144: warning: long int format, uint32_t arg (arg 2)
main.c: In function `main':
main.c:32: warning: control reaches end of non-void function
wait1.c: In function `main':
wait1.c:31: warning: division by zero
orphan3.c: In function `main':
orphan3.c:40: warning: control reaches end of non-void function
/bin/sh: line 1: nawk: command not found
make[2]: *** [conf.c] Error 127
make[1]: *** [linux] Error 1
make: *** [all] Error 2

网友: Godbach 时间:2007-03-13 22:56:16 IP地址:59.108.197.★
应该是你的系统不支持nawk命令,可以换成awk试试。

网友: pchild 时间:2007-05-18 09:15:47 IP地址:221.192.236.★
我也遇到同样的问题,在红帽下的make不成功,但使用“ln /bin/gawk /bin/nawk”后再进行编译,就成功了。其实apue2网站上的FAQ就有说明。

网友: Godbach 时间:2007-06-04 00:04:32 IP地址:166.111.52.★
是吗,解决了就好啊

网友: 本站网友 时间:2007-09-30 13:46:30 IP地址:202.120.37.★
make是过去了,但是当编译文件的时候还是会说找不到err_的东西啊,你们怎么解决的啊?

网友: Godbach 时间:2007-10-03 22:30:22 IP地址:221.219.15.★
其实作者提供了编译所有程序的方法,尤其是APUE2,用作者的方法很方便。我的blog上也有总结。
如果想自己动手调试,你完全可以把err_的相关函数,替换用printf,他无非就是打印出出错信息,用printf简单处理即可

网友: 本站网友 时间:2007-12-08 07:12:50 IP地址:58.251.110.★
“筛法”一文“确定其中一个为素数时,怎样保证另一个奇数一定也可以成为素数呢?…在数学理论上是办不到。全世界只有许世传办得到:“正向非负整数集和反向非负整数集组成二重元集合,再进行正反一次筛(容斥原理)”。这是新的数学理论和工具论证猜想,则得任一偶数表为奇素数对个数精确解公式及明确下界:“任一偶数是两个奇素数之和的个数,最少是偶数开方后奇素数的总个数,且恒不小于1”...2006年辽宁大学许作铭教授验算偶数1千亿均满足要求。  
    根据哥德巴赫猜想,可以制作"双钥锁密码".中国专利号200410005167.3 美国专利号11 / 884,299

网友: 本站网友 时间:2007-12-30 04:57:14 IP地址:58.251.112.★
E-mail: hsc1937@163.com

"正反一次筛"是经华南师范大学钟 集数论教授审核修改确定,经苏州大学朱 列(数论)导师(是钟 集教授的学生)编程验算:对小于20001的大偶数下界正确.2006年辽宁大学许作铭教授编程验算6至100,000,000,000大偶数下界正确.有厦门大学及集美大学数学林晴炎教授推荐.由哥德巴赫猜想编制的"双钥锁密码",取得中国专利号:200410005167.3, 美国专利号:11/884,299. 
如有E-mail可上传更详细资料给你们,谢谢!

为什么12月16日公布;17日就开大会,使很多有数学成果的人不能参加??? !!!

网友: 本站网友 时间:2008-01-03 20:49:15 IP地址:58.251.108.★
许翁赞

许君年迈解哥玄,
名扬神州民科间,
双钥密码开新意,
哥猜无用以从前,
百年梦想民科解,
勇挑官科数论权,
科技创新响华夏,
腾飞希望在民间。

送许世传老师   08年1月1日
此致    敬礼                学生闫赤元拜上

网友: 本站网友 时间:2008-01-24 10:24:02 IP地址:58.251.108.★
宇宙旋律的凯歌

物也空
事也空
宇宙万物皆归空
空空空  宇宙万物生其中

物理学家研究虚无怪事为真空
相等正负能量合称也是空★
空到黑暗无时空:
没有方向 没有时间 漆黑又朦胧★★
哪里是对立统一&#8226;阴阳同在的乾坤境界!

约在50亿年前
宇宙落地哭声震环宇
首先敬畏运动永恒是天命
正负极限能量移动相迂似台风
偶合激发宇宙大暴炸
火焰海
钢铁水
漫无边际在暴涨
胡芦炼丹三生万物★★★也天命
三阴三阳组合八卦图
击中质子中子粒子八重态★★★★
“一个偶数是二个奇素数之和”
恰是阴阳结合【质子+中子=原子】是太极
原子生分子
分子生万物
确是物质是能量的结晶体

生物始祖DNA
8&#8226;8=64个密码子
三个核苷酸来组成
正反核苷酸链组成双螺旋

物质粒子筹命最长1030年是天命
到时筹终正寝在黑洞也归空

★    在数学上相等正负能量总和是零。
★★  有物质体才有上下、左右、前后的三维空间;有物质移动才有钟表、电子的计时器。
★★★  《易经》是人类几千年观察宇宙万物悟出的事物存在形式和规律,是中华民族智慧的结晶:“道生一,一生二,二生三,三生万物”,宇宙万物不管无生命的物质和有机物质的生物都是三生万物,阴阳八卦是对立统一哲理、数理的形象图;正反一次筛把阴阳八卦数学化,与有关数学、密码、物理和生物巧合,宇宙存在一个统一的梦,要认识物质宇宙自然规律必需由此基础开始。
★★★★ 哥德巴赫B猜想:每个奇数 都是三个奇素数之和,对应易经“三生万物”,粒子是由三个夸克组成:质子由两个上夸克和一个下夸克组成(两阳一阴),中子由一个上夸克和两个下夸克组成(一阳两阴)。也对应DNA基因组三正、三反的读框,对应每个密码子由三个核苷酸组成。

网友: hsc1937@193.COM 时间:2009-01-29 09:01:27 IP地址:58.251.229.★
肯定破解哥德巴赫猜想的理由:
1、集美大学副教授林晴炎信“…从
而完成了对哥德巴赫猜想的论证”右图
2、    [定理1]由华南师范大学钟 集
教授审核确定。2001年8月由中科院
数学所《数学学报》审核过。图2
3、电脑验证正确:
A、十年来按公式手算数以千计例题与电算一致,对照素数表没发现错或漏。仅发现 = 6、12、38、68等有下界极限值。
B、苏州大学朱 烈数论导师等验算[定理2]结论:对 <20001正确。
C、2004年深圳大学宋富高副教授用四个月运算偶数  共有2047个极小值,均满足[定理2]要求。
4、苏州大学朱 烈导师、华南师范大学钟 集教授、香港大学曾啟文等数论教授,都同意在数学杂志发表(已发表在首届民科会刊上)
5、徐州师范大学许峰宇教授说:“…你这样, 不是破解(注:指哥猜)了吗”; 山东大学孙伯奎数学教授说:“对世界来说, 可不得了”。
6、网上评价:“…理论新颖者,许世传;可与数学泰斗比创新”
“筛法证明中存在的逻辑矛盾”一文中:“---确定其中一个为素数时,怎样保证另一个奇数一定也可以成为素数呢?这个问题在数学理论上是办不到的。全世界只有许世传办得到“正向非负整数集和反向非负整数集组成二重元集合,再进行正、反一次‘筛’(容斥原理)”。
7、用正反一次筛数学工具,已研发出《双钥锁密码》:中国专利号200410005167.3 美国专利号11 / 884,299;《简捷DNA密码》中国专利号:200810142408.7
2003年修改完再送审时, 北京大学专家已赴美;《数学学报》编辑部史永超主任说:“我亲自两次找他们(注:指数学家), 他们不看. 我无能为力”. 数学家不点头, 那能刊载. 科技体制不健全, 奈何! 只好在外国求出路:英国牛津大学翻译成英文版与双钥锁密码专利,由美国大卫深圳办事机构报美国专利局审理(已通知2009年1月29日公布)
   无奈!发出100万奖金否定我的定理!有效期2005年12月至2008年12月,至今无人应战,但有“2006年,辽宁大学许作铭教授编程运算偶数 均满足极限值要求”。
    2007年8月,本人被特邀嘉宾,参加第六届全国科学家高端论坛演讲时说:要求鉴定。是我参加大会的唯一目的!一个月过去了,只有中共中央党校来征文。到了2009年,我只好求助媒体
向国际数学界发出公告:2005年破解哥德巴赫猜想!

Blog作者的回复:
这些年有不少声称解决了哥德巴赫猜想的。。。


网友: 本站网友 时间:2010-02-04 08:54:44 IP地址:58.251.112.★
哥德巴赫猜想的意义和用途:

已证得:“任一偶数 表为两个奇素数之和 的奇素数对 个数 最少是 开方后奇素数总个数,且恒不小于1”。详参阅: 网 址: http://www.sea3000.net/xushichuan
评价2009.10.5《中国科技教育》杂志编辑部评价: 来稿已阅,其份量之重,价值之高,不容质疑. 猜想是世界难题,它所属领域必具重要性,背后隐藏着更重要性质或规律。仿效此法可论证:
1、用模6子集S ={6n±1  n=1,2,…}进行前(6n-1),后(6n+1)一次筛,可论证“孪生素数猜想”(另文);
2、用正反、前后一次筛,可论证“梁定祥猜想” (另文);
3、[正反一次筛]原理, 揭示了素数变化的规律性, 把普通筛法原点由0移至需要的(任意大)自然数处, 再进行反筛; 令不等同余方程的解等于1, 其解值x, 则 是《素数通用公式》; 

2009.10.5《中国科技教育》杂志编辑部评价: 来稿已阅,其份量之重,价值之高,不容质疑. 12月《中国教育实践与研究论坛》评委会获奖通知:[正反一次筛]荣获大赛壹等奖.入选大型教育文献《现代教育理论与实践指导全书》.
4、【双钥锁密码】中国专利号:200410005167.3;美国专利号:11881299。是根据猜想[定理1]公式制作,具有现代私、公钥密码体制都没有的完善保密性即无条件安全性(直至今天仅是理论概念), 是现代从未出现过的超前密码高端科技. 凭帐户(或卡)密码盗不到银行款;使用双钥锁密码消费不被偷,能产生不用钞票未来社会;有认证功能,不能仿冒, 可作全球每个人身份证、数字签发支票: 
5、“数学化的阴阳八卦与量子力学相关”:“正反一次筛” 数理对应于“当一个粒子和它的反粒子相遇时,就会互相湮灭,释放出巨大的能量,这些能量接着又物质化为其它粒子”的嬗变数理。是“对立统一” 哲理的数学语言,“正反一次筛”是物质嬗变数理在“奇点”处也成立;
6、“简捷DNA编码”中国专利号:200810142408.7:素数对对应碱基对; 6个元素的组合对应于64个密码子。仅测出每个人引物的初始值,每条染色体就能用电算计算出来.美国[生物科学]杂志评语: 文章很新颖,相信可以引起较大的社会反响,引起更多人的研究热情.
(四)人龙论坛: “---确定其中一个为素数时,怎样保证另一个奇数一定也可以成为素数呢?这个问题在数学理论上是办不到的。全世界只有许世传办得到“正向非负整数集和反向非负整数集组成二重元集合,再进行正/反一次‘筛’(容斥原理)”。

网友: 本站网友 时间:2010-03-13 15:06:54 IP地址:58.251.230.★
哥德巴赫猜想的意义和用途:

已证得:“任一偶数 表为两个奇素数之和 的奇素数对 个数 最少是 开方后奇素数总个数,且恒不小于1”。详参阅: 网 址: http://www.sea3000.net/xushichuan
评价2009.10.5《中国科技教育》杂志编辑部评价: 来稿已阅,其份量之重,价值之高,不容质疑. 猜想是世界难题,它所属领域必具重要性,背后隐藏着更重要性质或规律。仿效此法可论证:
1、用模6子集S ={6n±1  n=1,2,…}进行前(6n-1),后(6n+1)一次筛,可论证“孪生素数猜想”(另文);
2、用正反、前后一次筛,可论证“梁定祥猜想” (另文);
3、[正反一次筛]原理, 揭示了素数变化的规律性, 把普通筛法原点由0移至需要的(任意大)自然数处, 再进行反筛; 令不等同余方程的解等于1, 其解值x, 则 是《素数通用公式》; 

2009.10.5《中国科技教育》杂志编辑部评价: 来稿已阅,其份量之重,价值之高,不容质疑. 12月《中国教育实践与研究论坛》评委会获奖通知:[正反一次筛]荣获大赛壹等奖.入选大型教育文献《现代教育理论与实践指导全书》.
4、【双钥锁密码】中国专利号:200410005167.3;美国专利号:11881299。是根据猜想[定理1]公式制作,具有现代私、公钥密码体制都没有的完善保密性即无条件安全性(直至今天仅是理论概念), 是现代从未出现过的超前密码高端科技. 凭帐户(或卡)密码盗不到银行款;使用双钥锁密码消费不被偷,能产生不用钞票未来社会;有认证功能,不能仿冒, 可作全球每个人身份证、数字签发支票: 
5、“数学化的阴阳八卦与量子力学相关”:“正反一次筛” 数理对应于“当一个粒子和它的反粒子相遇时,就会互相湮灭,释放出巨大的能量,这些能量接着又物质化为其它粒子”的嬗变数理。是“对立统一” 哲理的数学语言,“正反一次筛”是物质嬗变数理在“奇点”处也成立;
6、“简捷DNA编码”中国专利号:200810142408.7:素数对对应碱基对; 6个元素的组合对应于64个密码子。仅测出每个人引物的初始值,每条染色体就能用电算计算出来.美国[生物科学]杂志评语: 文章很新颖,相信可以引起较大的社会反响,引起更多人的研究热情.
(四)人龙论坛: “---确定其中一个为素数时,怎样保证另一个奇数一定也可以成为素数呢?这个问题在数学理论上是办不到的。全世界只有许世传办得到“正向非负整数集和反向非负整数集组成二重元集合,再进行正/反一次‘筛’(容斥原理)”。

 发表评论