3522vip-澳门新葡亰平台官网-www.3522vip.com

3522vip☞(www.rivieraquest.com)能够为大家带来真正的真钱享受,澳门新葡亰平台官网开创业内先河,注册,开户,登录开始体验不同的娱乐世界,全国第一家以娱乐产品为主体对象的专业平台,菲律宾全资子公司成立,天天免费68周周再送168。

3522vip > 计算机编程 > Spence Murray谈Linux程序开发经验

原标题:Spence Murray谈Linux程序开发经验

浏览次数:107 时间:2019-11-22

如果只会用Frontpage、Dreamweaver的所见即所得编辑模式来写网页,而完全不懂HTML的语法,恐怕要先下点功夫了解HTML语法,才能顺利的写PHP程序了。如果早就非常了解HTML幕后排版语言的语法,那么应该可以马上开始PHP的程序写作了。在PHP这种后端服务器的程序语言,下苦功去学习HTML是写作的必备条件。 对熟悉Windows系列系统平台的用户,有套软件倒是在开发PHP程序上是蛮方便的,就是PHPEditor,若对这软件有兴趣,不妨到 若您和笔者一样,对Linux/UNIX很偏执,或许可以尝试使用Bluefish:蓝鱼PHP写作工具,只要装好Linux及X-Window之后就可以使用了。要使用中文的话,需要在X-Window加入中文的字型及输入法,要方便的话,使用RedHat加上CLE中文支持就好了。 假使您已是老Linux/UNIX了,也不喜欢使用这些专门的开发工具。相信您对vi或是Emacs一定相当熟悉,那么就在装好Web服务器和PHP程序后,直接用vi或Emacs写PHP程序就可以了,并且可以直接看到执行的真正结果,和数据库或是其它的服务程序链接,也不会有什么问题。这种「所写即所得」的方式,岂不痛快!! PS:本人最近学php,发现用phpexperteditor4_10178.rar不错,而且是注册版的,可以容易的直接运行显示效果.

现在Linux越来越火热,你Linux系统了解么?本文为你详细介绍Linux常用软件,为你在学习Linux常用软件时起一定的作用。Linux是一个成熟而稳定的网络操作系统。一个操作系统很重要的部分就是它所支持的各种界面和应用软件,Linux上的软件还有一个特点,那就是这些软件都是免费的。

Spence Murray 是 Codemonks Consulting 的创始人之一,自从 20 世纪 80 年代最早在 SunOS 上编写代码到现在,一直致力于 UNIX/Linux 的开发。从那时起,他曾在 IBM 公司的 AIX、SGI 公司的 Irix 工作,长时间地编写跨平台的 UNIX 代码,包括 HP/UX,Irix,Solaris/SunOS,SCO UNIX,各种 BSD,MacOS X,当然,还有 Linux。从图形/视频设备驱动程序到 UI 代码,他什么工作都做过。Murray 编写的跨平台代码包括 X Window System Xserver 代码,以及作为 Netscape Navigator 一部分的核心浏览器代码。

1. 基本的命令和工具

Murray 最经常使用的 Linux 工具是 vi、bash 和 Emacs。“不论我是在写 C、C 、Java、shell 脚本,还是 HTML,大部分的时间我都在这些工具中来回切换”,他说。

应该说现在的Linux已经把在标准的UNIX系统上可以找到的应用软件几乎都已移植过来了,还包括一些基本的命令ls,cp,mv,more等等, Linux上有许多文本编辑程序,象vi,ed,joe,还有GNU Emacs等,另外还有多种Shell,比如:C Shell、Bourne Shell、Bash(GNU Bourne Again Shell)、Tcsh,(带有许多扩充功能的C shell)、Zsh(一个类似于Bourne Shell的小型shell)。Shell对很多用户来说都是很重要的应用软件,它相当于ms-dos下的批处理文件(batch file),但是shell的功能要强大很多,shell程序读入用户的命令,然后执行,shell的最重要的特点就是包含了一个任务描述的命令语言。

Linux 秘密武器

Linux上的多种shell之间的最大差别就在于这种命令语言,C Shell的命令语言很像C语言,Bourne Shell使用另一种不同的语言。其中最广泛使用的就是Bash,这是Bourne Shell的遍体,它包括了例如任务控制、历史命令、重定向,补全命令等完整化的操作。有了这些不同的Shell,我们就可以自己动手设计我们自己需要的 工作环境了。

Murray 认为,对一个 Linux 开发人员来说,shell 是一个强大的软件开发工具,无论怎么评价都不过分。“在我做的每一项工作中都要用到 shell 脚本,不论是快速地阅读和修改普通文本还是编写代码”,他说。“它轻便而快捷,它短小的命令使得来回移动代码称为一个迅速而没有痛苦的过程。作为一名编辑,它很快就会成为第二本能”。

2. 程序设计语言

对 Murray 来说,Emacs 作为一个开发工具出现的晚了一些。“在 90 年代早期,我尝试使用 Emacs 作为一个 IDE,并很快就转换门厅。Emacs 非常强大,在那些日子里,我会一直开着一个 Emacs 窗口,经常打开几十个源文件,每个都有我编辑的上下文、使用 gdb 的调试会话以及在不同的源目录下运行的 bash 脚本。有很多关于 Emacs 的资料,可以说,这是个可怕的工具...再者,您可以在任何您想要花时间去做开发的系统上运行 Emacs。

Linux提供了一个完整的UNIX编程环境,包括标准程序库、编程工具、编译器和 调试器。在UNIX环境下,应用程序和系统程序的设计通常是C或C 语言,在Linux上的标准C或C 编译器是GNU的gcc,gcc是一个比较先 进的编译器,有多种的选项。除了C语言之外,许多其它的语言的编译器和解释器也都移植到Linux上了。比如说FORTRAN、PASCAL、PERL、 GWK等等。还有先进的调试器gdb。帮助用户一步一步地运行自己地程序,进行调试。

自从 20 世纪 80 年代中期第一次使用 SunOS支持的 vi 这个简洁的环境以来,Emacs 编辑器已经成为了 Murray 的标准工具。"它在各种流派的 UNIX 上都可以使用,这是我在致力于跨平台的开发工作时选择它的主要原因之一”,他说。

Linux还实现了共享程序库的动态链接机制,简称DLL。这样就使程序的二进制代码的长度大为减少。
在Linux上开发应用程序是很方便的,除了我们刚才提到的语言外,Linux上还有许多非常小巧实用的语言(gawk语言.Etc)

Linux 开发人员:了解您的 shell

3. X窗口系统

Murray 要求您要了解您的 shell。“Bash、tcsh、csh――shell 是您最基本的软件开发工具”,他强调说。“它可以做许多了不起的事情。所有的工作都要依赖于它……和它的强大功能”。作为说明通用的 shell 脚本功能强大的例子,在参考资料部分中有一个可以下载的文件,其中有一组脚本,用于获得 Red Hat 发行的更新 RPM 软件包并将它们合并到原来的软件包和定制的软件包。下载文件并解压缩后,您可以在 /developerworks/rpm_update_scripts 目录下找到脚本。最终结果是一个包括所有软件包最新版本的目录和一个用于网络安装的升级的 hdlist 文件。

X-Window是由MIT开发的一套标准图形接口,当前的版本为X11R6.3,它与Window和Macintosh的图形界面不同,它是一套平台 独立的基本图形功能调用接口,它不包括硬件和具体的显示风格。因此,X-Window具有高度可配置性。但是MIT发布的X-Window源代码没有包括 在具体硬件上的实现,所以如果让它在硬件上运行起来的话,还需要开发相应的硬件驱动程序, Linux下的X-Window系统是Xfree86,现在的版本是3.3.3。它包括了多种的应用程序、程序库和文档资料。

下面的代码片段实现的是对 Red Hat RPM 软件包的自动更新,以创建一个使用最新的 RPM 的可以安装的版本。这对任何一个维护公共 Linux 服务器的人来说是一个基本的步骤。就我们而言,我们通常是维护许多公共 Linux 服务器上的大量网络服务。下面是可以自动完成更新最新的安全和功能的过程的部分脚本。

标准的X应用程序有用于X窗口的以文本方式为主的应用程序的终端仿真器Xterm,还有中文的环境Cxterm,管理用户登陆的X管理程序xdm,时钟显示器xclock,还有用于X窗口联机用户手册Xman,等等。
我们知道X窗口图形界面的外观和使用在很大程度上取决于窗口管理程序。标准的Xfree86包括twm,这是一个经典的窗口管理程序。当然使用最多的还是fvwm。

下面的脚本样例证明了普通的 shell 编程技术可以广泛应用于各种系统配置和程序设计应用。脚本使用的是 bourne shell,它是在不同的 UNIX 系统中最为常见的 shell。这样就可以保证这些非常轻便的代码可以稍加修改或者不加修改地在不同的 UNIX 系统上使用。修改 Red Hat 软件包的规范以应用于其它 Linux 发行版本是很容易的。

4. 网络设置

freshen.sh 使用指定的 RPM ftp 更新站点上的 RPM 软件包来更新原有的 RPM 列表。执行过滤器来替换更新 RPM 软件包。最后,长长的发行列表根据从更新镜像站点上得到的新 RPM 软件包完成更新。

Linux支持两种基本的UNIX上的网络协议:TCP/IP、UUCP。它还支持SLIP和PPP协议。它提供标准的SOCKET编程界面,所以基本 上任何使用TCP/IP协议的应用程序都可以移植到Linux上。 UUCPUNIX to UNIX COPY)现在用的不是很多了,它是一个比较老的协议,主要用于在UNIX机器间进行文件、邮件和新闻传送的机制。原先UUCP是用调制解调器在电话线连 接的机器之间进行工作的,后来也可以用在TCP/IP网络上。

清单 1. fresh.sh

5. 其它应用程序

#!/bin/sh
rh_ver=$1
rh_path=$2
update_dir=${rh_path}/RH${rh_ver}-updates
custom_dir=${rh_path}/RH${rh_ver}-custom
install_dir=${rh_path}/RH${rh_ver}-install# Sanity check for the original directory.# Create update and install directories if they don't exist[ -d ${update_dir} ] || mkdir ${update_dir}
[ -d ${install_dir}/RedHat/RPMS ] || mkdir -p ${install_dir}/RedHat/RPMS# Get latest updates from fresh rpms FTP site./get_update.sh ${rh_ver} ${update_dir}# Create/update hardlinks from update, and custom directories
# to the install directory. We assume that original RPMS are already
# hardlinked to the install directory, so all we need to do is filter
# out any replaced by updated packages../do-links.sh ${update_dir} ${install_dir}/RedHat/RPMS
[ -d ${custom_dir} ] && ./do-links.sh ${custom_dir}
${install_dir}/RedHat/RPMS# Filter out all but the latest version of everything../filter-rpms.pl $install_dir/RedHat/RPMS# Rebuild the hard disk lists
/usr/lib/anaconda-runtime/genhdlist ${install_dir}

其它的一些商业软件厂商也加入了 Linux应用程序贡献者的队伍。 在Linux上有几个关系数据库,有Postgres,Oracle8I,Imgres,Mbase等。由于Linux支持POSIX1003.1标准, 我们自己也可以把在UNIX上运行的免费软件在Linux上编译,应该不会遇到什么困难。

freshen.sh 调用 do-links.sh 和 get_update.sh ,分别去设置 RPM 发行版本的源、宿(省略了源 RPM 软件包;硬链接用来设置目的 RPM)和检索更新。

通过Linux常用软件的介绍,希望你能学好Linux。

清单 2. do-links.sh

  1. Linux设计宗旨和方法
  2. 各种的Linux发行版本
  3. 详解Linux内核与GNU计划
  4. 深入浅出了解Linux操作系统
  5. 让你了解Linux常见问题
#!/bin/shsrc=$1
dest=$2#for file in $src/*; do
for file in `find $src -name *.rpm -a ! -name *.src.rpm -print`; do
base=`basename $file;`
if test ! -f $dest/$base; then
echo "Linking $file";
ln $file $dest
else
echo "EXISTS: $file";
fi
done

...

清单 3. get_update.sh

#!/bin/sh
rh_ver=$1
dest=$2
echo "Retrieving updates for version ${rh_ver} to $dest"
lftp << EOF
open ftp.freshrpms.net   mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i386 $dest/i386
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i486 $dest/i486
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i586 $dest/i568
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i686 $dest/i686
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/SRPMS $dest/SRPMS
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/noarch $dest/noarch

Java 和 Linux

在 Codemonks,相当多的开发工作是在 Linux 上用 Java 完成。这两个工具的组合为创建商业级质量的 Web 应用提供了一个平台,Murray 说。“在做这些项目的过程中,我们发现我们要总体上了解客户已有的应用代码”,他回忆说。locks.c (在下载得到的压缩文件中的 /developerworks/locks 目录下) 是一个代码片段,实现的是用于 Java Virtual Machine Profiler Interface (JVMPI) 的读/写锁以及大量的调试代码。

Linux 开发人员的代表

“在情况允许的时候,不要写特定于系统的代码”,Murray 说,而是克服困难去“写好的跨平台的代码”。受雇的 Murray 坚持认为他最大的资本永远是“写具有商业品质的代码,构建和提供网络服务,定制 OS 或内核,而且完全基于可靠的开放源代码的平台”。

下面是一个代码片段,来自于一个跨平台的定制的 IMAP 服务器,这个服务器由 Linux 和 MacOS X 的开发人员共同开发。代码实现的是一个用来处理字符串的简单的增长缓存。这样避免了缓存溢出的问题(不要忘记那些安全漏洞),而不必要您每次做某些事情的时候重新分配空间。它是通过维护一个简单的可变长的缓存来实现的,这个缓存可以写满和清空。这个缓存已经被用于一个实验用的 IMAP 服务器,这个服务器是由一个团队紧张工作了一周完成的。

除了一个简单的字符串缓冲区的实现之外,这段代码还实现了一个可变大小的字符串数组。它完成的是一个简单的接口,当您写完一个字符串以后,您可以标记它然后继续写下一个。此外,这样会节约空间分配,并且将比较乱的代码组织到一起。

完整的 IMAP 服务器的代码将在今年某个时间发布。

清单 4. 定制的 IMAP 服务器一部分

#ifndef HOED_BUF_H
#define HOED_BUF_Htypedef struct {
char *str;
int size;
int length;
int str_start;
int max_size;int n_strings;
int size_strings;
int *str_posn;
char **str_set;
} hoed_buf_t;#if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define PRINTF(f, a)    __attribute__((format (printf, f, a)))
#else
#define PRINTF(f,a)
#endifextern hoed_buf_t *hoed_buf_alloc(int init_size, int max_size);
extern void hoed_buf_free(hoed_buf_t *);
extern void hoed_buf_reset(hoed_buf_t *);
extern void hoed_buf_new_string(hoed_buf_t *);
extern char **hoed_buf_get_set(hoed_buf_t *, int *n_string);extern char *hoed_buf_put_char(hoed_buf_t *, char toadd);
extern char *hoed_buf_sprintf(hoed_buf_t *, const char *format,...)
PRINTF(2,3);
extern char *hoed_buf_strcat(hoed_buf_t *, const char *append);
extern char *hoed_buf_cat_sprintf(hoed_buf_t *, const char *format, ...)
PRINTF(2,3);#endif /* HOED_BUF_H */

称为杀手级的 Linux 应用程序

对 Murray 来说,有两个杀手级的 Linux 应用程序:Emacs 和 Netscape Navigator。“Emacs 或许是给人印象最深而且广为应用的基于 Linux 的应用程序”,他说。“另一个是 Netscape Navigator。有一次,我们要支持20多种 UNIX,我在 Linux 上完成了所有的工作”。

他继续说,“有趣的是,基于 Linux 的应用程序可能运行于许多不同风格的 UNIX 系统上,甚至安装了 Cygwin 的 Windows 系统。”

Linux 的未来如何?

当前,Murray 正在进行的 Linux 项目有好几个,从支持电子邮件、消息和共享数据库的分布式办公应用程序到使用标准工具的网络应用程序(标准工具包括:Apache/Tomcat, PHP, PostgreSQL, MySQL, 和 Linux)。 Murray 有他自己的公司专门为网络服务和网络应用提供主机服务。

对 Murray 来说,得益于 Linux 强大功能的应用程序的列表在不断地增长。“有很多”,他说。“Oracle, WebSphere, Apache, PostgresQL, MySQL, Cyrus IMAP... 这个列表很长而且在不断增长。”

对 Murray 来说,Linux 到此为止了。“我们所有的服务器都运行 Linux;不管目标平台如何,我们主要的开发都在 Linux 上进行;我们把 Linux 推荐给用户来运行服务器应用程序”,他说。“ Linux 快速发展的步伐,开放源代码组织对它的广泛支持,低廉的开发费用,如果把这些结合在一起,您就知道它是一个难以击败的平台”。

Murray 是 Codemonks Consulting 的创始人之一,自从 20 世纪 80 年代最早在 SunOS 上编写代码到现在,一直致力于 UNIX/Linux 的开发。从那时起,...

本文由3522vip发布于计算机编程,转载请注明出处:Spence Murray谈Linux程序开发经验

关键词: 3522vip

上一篇:php magic_quotes_gpc开关的例子

下一篇:没有了