摘要: open():#include<fcntl.h>#include<types.h>#include<sys/stat.h>/*此头文件里面定义了mode标志*/int open(const char *path, int oflags);int open(const char *path, int oflags, mode_t mode);函数描述:open建立了一条到文件或设备的访问路径。如果操作成功,它将返回一个文件描述符,如果失败,返回-1。此函数说明:第一个参数表示:路径名或者文件名。路径名为绝对路径名,文件则是在当前工作目录下的。 第二个参数表示: 阅读全文
posted @ 2012-02-23 15:56 beishuai 阅读(810) 评论(0) 推荐(0) 编辑
摘要: 引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。但是如果通过查阅make的帮助文档来手工编写Makefile,对任何程序员都是一场挑战。幸而有GNU 提供的Autoconf及Automake这两套工具使得编写makefile不再是一个难题。本文将介绍如何利用 GNU Auto 阅读全文
posted @ 2012-01-13 15:52 beishuai 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则 阅读全文
posted @ 2012-01-13 13:59 beishuai 阅读(273) 评论(0) 推荐(0) 编辑
摘要: linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库,是好多个.o合在一起,用于静态连接.la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式 $file *.la *.la: ASCII English text所以可以用vi来查看其内容。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@创建.a库文件和.o库文件:[yufei@localhost perl_c 阅读全文
posted @ 2011-12-22 15:48 beishuai 阅读(5048) 评论(0) 推荐(0) 编辑
摘要: 在研究项目团队协作开发的情况下(这里的团队协作也适合于应用项目的开发),编程时应该强调的一个重要方面是程序的易读性,在保证软件速度等性能指标能满足用户需求的情况下,能让其他程序员容易读懂你所编写的程序。若研究项目小组的所有开发人员都遵循统一的、鲜明的一套编程风格,可以让协作者、后继者和自己一目了然,在很短的时间内看清楚程序结构,理解设计的思路,大大提高代码的可读性、可重用性、程序健壮性、可移植性、可维护性。制定本编程规范的目的是为了提高软件开发效率及所开发软件的可维护性,提高软件的质量。本规范由程序风格、命名规范、注释规范、程序健壮性、可移植性、错误处理以及软件的模块化规范等部分组成。本软件开 阅读全文
posted @ 2011-12-21 17:28 beishuai 阅读(559) 评论(0) 推荐(1) 编辑
摘要: 1.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 your source files --> [autoscan*] --> [configure.scan] --> configure.ac2.aclocal (automake):根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclo 阅读全文
posted @ 2011-12-07 15:05 beishuai 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 1、简单C语言的词法分析程序;%{#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>%}digit[0-9]letter[A-Za-z]other_char[!-@\[-~]id({letter}|[_])({letter}|{digit}|[_])*string{({letter}|{digit}|{other_char})+}int_num{digit}+%%[ |\t|\n]+"auto"|"double"|&q 阅读全文
posted @ 2011-11-21 09:48 beishuai 阅读(3535) 评论(1) 推荐(2) 编辑
摘要: 2.4.3 yacc解决二义性和冲突的方法在2.3.8中已涉及到二义性和冲突的问题,这里再集中介绍一下,这在写Yacc源程序时会经常碰到。二义性会带来冲突。在2.3.8中我们介绍了yacc可以用为算符确定优先级和结合规则解决由二义性造成的冲突,但是有一些由二义性造成的冲突不易通过优先级方法解决,如有名的例子:stat:IF bexp THEN stat|IF bexp THEN stat ELSEstat;对于这样的二义性造成的冲突和一些不是由二义性造成的冲突,Yacc提供了下面两条消除二义性的规则:A1.出现移进/归约冲突时,进行移进;A2. 出现归约/归约冲突时,按照产生式在yacc源程序 阅读全文
posted @ 2011-11-21 09:46 beishuai 阅读(3374) 评论(0) 推荐(2) 编辑
摘要: 二、语法分析程序自动产生器yacc的使用方法2.l yacc概述形式语言都有严格定义的语法结构,我们对它们进行处理时首先要分析其语法结构。yace是一个语法分析程序的自动产生器,严格地说Lex也是一个形式语言的语法分析程序的自动产生器。不过Lex所能处理的语言仅限于正规语言,而高级语言的词法结构恰好可用正规式表示,因此Lex只是一个词法分析程序的产生器。yace可以处理能用LALR(1)文法表示的上下文无关语言。而且我们将会看到yace具有一定的解决语法的二义性的功能。yacc的用途很广,但主要用于程序设计语言的编译程序的自动构造上。例如可移植的C语言的编译程序就是用yacc来写的。还有许多数 阅读全文
posted @ 2011-11-21 09:45 beishuai 阅读(2528) 评论(0) 推荐(2) 编辑
摘要: Lex自动地表示把输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,它有一个固定的名字yyler,在这里yyler是一个C语言的程序。Yylex将识别出输入串中的词形,并且在识别出某词形时完成指定的动作。看一个简单的例子:写一个lex源程序,将输入串中的小写字母转换成相应的大定字母。程序如下:%%[a-z]printf(“%c”.yytext[0]+'A'-'a');上述程序中的第一行%%是一个分界符,表示识别规则的开始。第二行就是识别规则。左边是识别小写字母的正规式。右边就是识别出小写字母时采取的动作:将小写字母转换成相应的大写字母。 阅读全文
posted @ 2011-11-21 09:43 beishuai 阅读(2544) 评论(0) 推荐(1) 编辑