西安交通大学 李思2004年8月25日-大学课件-_第1页
西安交通大学 李思2004年8月25日-大学课件-_第2页
西安交通大学 李思2004年8月25日-大学课件-_第3页
西安交通大学 李思2004年8月25日-大学课件-_第4页
西安交通大学 李思2004年8月25日-大学课件-_第5页
已阅读5页,还剩44页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Autoconf,automake,sed,awk,gcc,基本库,信号,西安交通大学 李思2004年8月25日Linux程序设计基础主要内容Java程序开发环境C/C++程序设计基础使用gcc编译程序LinuxC编程与WindowsC编程的主要区别使用gdb调试程序Make和Makefile其它工具:Indent和CVSShell编程快速入门Bash脚本正则表达式,Sed和awk1. Java程序开发环境JDK的安装

到下载jdk的安装文件:j2sdk-1_4_2_05-linux-i586.bin

并把文件存放到/usr/local下#chmod

+x

j2sdk-xxxxxx.bin#/usr/local/j2sdk-xxxxxx.binln

-s

j2sdk1.4.2_04

java编辑/etc/profile,增加如下三行:export

JAVA_HOME=/usr/local/java/

export

CLASSPATH=.:/usr/local/java/lib/dt.jar:/usr/local

java/lib/tools/jarexport

PATH=/usr/local/java/bin:$PATH注意:上面命令中不能随意添加空格退出,重新登陆Hello

World#vi

HelloWorld.javapublic

class

HelloWorld{public

static

final

void

main(

String

args[]

){System.out.println("Hello

World");}}#javac

HelloWorld.java#java

HelloWorld其它开发工具Linux下常用的Java集成化开发环境有JBuilder(最新版为X)Eclipse(最新版为3.0)Eclipse安装提示有motif和gtk两个版本,建议选gtk版安装Eclipse之前必须先安装JDK或者JRE用unzip命令解开压缩包运行方法:eclipse

-vm

/usr/local/java/bin/java

-vmargs

-Xmx256M2. C/C++程序设计基础开发工具与开发环境基本工具vi,

emacs,

gcc,

g++,

gdb图形界面调试工具DDD集成化开发环境Kylix、Kdevelop、Eclipse+CDT工程管理版本控制:CVS条件编译:makegcc/g++用法:gcc

[<options>]<input

files>常用的选项:-g:产生调试信息(用于gdb调试)-Wall:输出所有警告信息-D<sym>:在所有源代码中定义<sym>-o

<name>:指定输出文件名-c:只编译成目标文件,不连接-I

<dir_name>:指定include的路径-l<lib_name>:指定需要连接的库-S:输出汇编语言文件-O:对编译的结果进行优化Example:

gcc

-g

–Wall

–o

hello

hello.cpp头文件系统默认的头文件路径为:/usr/include

当头文件既不在源代码目录下,也不在默认目录下时,有两种办法指定其目录在源文件中指定,例如:#include

</usr/local/mysql/include>

编译时通过-I参数指定,例如:

gcc

–o

foo

foo.c

–I/usr/local/mysql/include

一般在编写内核模块驱动程序时需要指定头文件路径静态库文件的连接 静态库文件位于/usr/lib目录下,文件名为

libname.a

当使用到库函数时,应该把库函数连接到程序中去例如:gcc-o

foo.c-lm注意:-l的参数不是库文件名,而是库名 如果库不在/usr/lib下,应该采用-L参数指定其路径例如:gcc-o

foo

foo.c-L/root–lmylib 常用的静态库包括:数学库m,线程库

pthread,动态加载库dl等共享库(1)共享库的生成使用-fPIC参数生成位置无关代码使用-shared参数生成共享目标库例如:gcc-fPIC-shared-o

libfoo.so

foo.c共享库的调用使用dlopen函数打开共享库文件使用dlsym取得共享函数的指针使用共享函数指针调用共享函数使用dlclose关闭共享库文件编译方法:gcc-o

foo

foo.c-ldl共享库(2)

如果在dlopen函数中没有指定共享库文件的绝对路径,则按照一下顺序搜索用户的LD_LIBRARY_PATH环境变量/etc/ld.so.cache中列出的路径/lib和/usr/lib注意:不要直接修改/etc/ld.so.cache应该修改/etc/ld.so.conf然后运行ldconfig以更新/etc/ld.so.cache

使用ldd命令可以列出一个程序所依赖的共享库例如:ldd/bin/lsLinux

IPC概述

进程间通信IPC是Linux编程与Windows编程最大的区别之一Linux下的进程间通信分为以下几类:信号:用于进程间的事件通知,如定时器等管道:父子进程之间单向的通信机制信号量:用于实现进程间的同步消息队列:用于实现异步共享通信共享内存:用于进程间共享数据UnixSocket:与BSD

Socket类似,但效率高于后者Make与Makefile

当一个程序包含多个C语言源代码文件时,手工编译程序将会十分麻烦

make实际上是工程(项目)管理程序,它可以根据makefile中定义的规则自动编译、安装程序makefile可以自己编写,但更多时候是由开发工具自动生成(autoscan,

aclocal,

autoconf,

automake)Make命令的格式make

[-f

<makefilename>]

[<target>]

如果不指定makefilename,默认为当前目录下的makefile或者Makefile

Target是Makefile中定义的目标,默认为第一个目标Makefile的写法Makefile内部可分为两部分变量定义:<variable>=<string

value>所有变量的默认值都源自于Shell变量规则定义:<目标>:<依赖><命令><目标>是指本条规则要生成的文件或达到的效果

<依赖>是指执行本条规则所需要的文件或者条件,它可以是文件,也可以是其它目标

<命令>是指本条规则的动作,Makefile中的第一个目标是默认的目标Makefile实例#

Example

MakefileCC=g++CCOPTS=-g

–Wall

-DDEBUGfoobar:

foo.o

bar.o$(CC)

$(CCOPTS)

–o

foobar

foo.o

bar.ofoo.o:

foo.cpp

foo.h$(CC)

$(CCOPTS)

–c

foo.cppbar.o:

bar.cpp

bar.h$(CC)

$(CCOPTS)

–c

bar.cppclean:rm

foo.o

bar.o

foobarMakefile的常用缩写$@代表该目标的全名$*代表已经删除了后缀的目标名$<代表该目标的第一个相关目标名例如:prog:prog1.o

prog2.ogcc

prog1.o

prog2.o

-o

$@prog1.o:

prog1.c

lib.hgcc

-c

-I.

-o

$@

$<prog2.o:

prog2.cgcc

-c

$*.cGDBGDB=GNU

DeBugger它是一个文字界面下的程序调试工具常见用法:gdb[<programfile>

[<pid>]]<programfile>:可执行程序的文件名<pid>:正在执行的程序的进程号例如gdb

./hellogdb

bash

6174要求:

使用gcc/g++编译程序时,应该添加-g参数,才能实现源代码级的调试gdb的命令(1)基本命令:file

[<file>]run

[<args>]attach

<pid>killquithelp[<topic>]打开文件<file>进行调试用<args>参数来运行当前的程序调试进程号为<pid>的进程杀死当前调试的进程退出gdb显示帮助

单步与继续:

c[ontinue]s[tep]n[ext]finish继续执行运行一行源代码,跟踪进入函数内部运行一行源代码,不进入函数内部运行到函数结束并显示返回值gdb的命令(2)断点b[reak]

[<where>]设置断点,<where>可以是地址、函数名、行号等。还可以是<文件名>:<行号>的格式设置观察点。每当<expr>被写(或被读)的时候,显示该变量当<event>事件发生的时候程序暂停,可用于捕获一系列的事件,包括C++的异常显示出所有断点的列表清除<where>处的断点删除第<nums>个断点[r]watch

<expr>catch

<event>infobreak[points]clear

[<where>]d[elete]

[<nums>]gdb的命令(3)用于获取信息的命令:list

[<where>]search

<regexp>backtrace

[<n>]info[<what>]打印<where>处的源代码在源代码中查找<regexp>表达式打印<n>级回溯显示有关<what>的信息(如局部变量,函数参数等)显示表达式<expr>的值p[rint]

[<expr>]数据修改与路径控制命令:set

<name>

<expr>return

[<expr>]jump

<where>设置变量或者参数从当前函数返回<expr>的值跳到<where>处执行indent源代码格式美化工具其功能是在源代码中插入与删除空格GNU风格:indent-gnu

foo.cKR风格:indent-kr

foo.c

Linux内核源代码所用的风格是kr风格,且行缩进为8个空格indent

-kr

–i8

xxx.cCVS服务器配置

CVS=Concurrent

Version

System,是一种源代码版本管理系统,有助于实现团队协作CVS服务器的配置在/etc/xinet.d/中添加cvspserver配置文件useradd

cvs;

chmod

770

/home/cvs

-R

在/etc/profile中添加export

CVSROOT=/home/cvscvs

-d

/home/cvs

init进入需要使用CVS的工程目录cvs

import

ProjName

v_tag

r_tagCVS客户端的使用在/etc/profile里添加export

CVSROOT=:pserver:cvs@50:/home/cvscvs

login:登陆cvs

logout:退出

cvs

checkout

ProjName:下载某项工程到本地cvs

update:检查文件更新状况cvs

commit:提交文件cvs

log:检查文件的修改日志cvs

add:添加一个文件cvs

remove:删除一个文件3. Shell编程快速入门概述Shell程序比Windows批处理功能更强

Shell的种类:Bourne

Shell(bsh)、BourneAgain

Shell(bash)、C

Shell(csh)等等文件第一行#!/bin/sh指明shell解释器其它各行从#开始到行末的字符均为注释chmod

+x

filename使文件可执行shell的两种执行方式./filename/bin/sh

filenamebash变量赋值变量的赋值:str=“Hello,

world!”注意等号两边不可有空格接受用户输入:read

str1

str2特殊变量$0这个程序的执行名字$n这个程序的第n个参数值,n=1..9$*这个程序的所有参数$#这个程序的参数个数$$这个程序的PID$!执行上一个背景指令的PID$?执行上一个指令的返回值bash表达式与变量的使用变量的引用:echo

$str变量名产生歧义时应该加{}num=2echo

“This

is

${num}nd”计算表达式例:expr

2+3程序执行结果的引用:使用一对`符号例:echo"The

cureent

directory

is"`pwd`例:number=`expr

$number+1`bash变量和通配符的展开未加任何引号的变量和通配符会被展开“”可以禁止通配符的展开‘’可以禁止任何展开

\可用作转义字符,在expr中使用*、(、)时,必须使用\防止产生歧义echo

*.txt将列出当前目录所有txt文件echo“*.txt”*号将无法展开echo“this

is

$abc”变量abc将被展开echo‘this

is

$abc’变量abc将无法展开expr

2\*\(1+3\)bash逻辑表达式(1)int1

-eq

int2如果int1=int2则为真int1-ge

int2如果int1>=int2则为真int1

-gt

int2int1

-le

int2int1

-lt

int2如果int1>int2则为真如果int1<=int2则为真如果int1<int2则为真int1-ne

int2如果int1!=int2则为真如果str1和str2相同则为真如果str1和str2不相同则为str1

=

str2str1

!=

str2真str-n

str-z

str如果str不为空则为真如果str的长度大于零则为真如果str的长度等于零则为真bash逻辑表达式(2)-d

file-f

file-r

file-s

file-w

file-x

file!expr如果file为目录则为真如果file为文件则为真如果file为只读则为真如果file长度大于零则为真如果file可写则为真如果file可执行则为真对expr的逻辑值取反expr1-a

expr2

expr1和expr2相与expr1-o

expr2

expr1和expr2相或Bash的If语句if

[.…];

then....elif

[.…];

then....else....fi注意if和fi应成对出现Bash的&&和||以下两个语句是等价的,请注意&&

[

-f

"/etc/shadow"

]

&&

echo

"Thiscom\

puter

uses

shadow

passwors"if

[

-f

"/etc/shadow"

];

thenecho

"This

computer

uses

shadowpasswors"fi

与&&相反,||在逻辑表达式为假时执行后面的语句Bash的Case语句case

string1

instr

1)commands;;str

2)commands;;*)commands;;esacBash的循环语句For循环for

var

in

list;

do……doneWhile循环while

[……];

do……doneBash的函数函数必须先定义后使用定义函数的方法function

foo(){……}()和function二者可以省略其一利用$1,

$2……可以取得函数的参数利用local可以定义局部变量return只能返回0~255之间的整数用$?可以取得return返回的值一般通过全局变量返回函数结果Bash函数实例#!/bin/bashfunction

add

{local

temp;temp=`expr

$1

+

$2`sum=`expr

$temp

+

$3`return

$sum}add

1

2

3echo

$?echo

$sumShell脚本的自动执行(1)开机时自动执行在/etc/rc.local中调用脚本或把shell脚本直接写到/etc/rc.local用户登陆时自动执行/etc/profile~/.bash_profile~/.bashrc/etc/bashrcShell脚本的自动执行(2)定时执行:atd系统服务at

–f

file

HH:MM

MMDDYYatq:显示定时任务队列atrm:删除某项定时任务执行的结果用email发回周期性执行:crond系统服务

crontab–e:编辑周期执行列表格式:分时日月星期命令crontab–l:显示周期执行列表crontab–r:删除周期执行列表执行的结果用email发回正则表达式(1)正则表达式是用于实现字符匹配的表达式基本字符/ 转义字符,表示其后的是特殊字符.匹配一个任意字符[]匹配方括号内列出的任何一个字符[^]不匹配方括号内出现的任何一个字符多字符匹配?匹配0或者多个字符*匹配其前面的字符0次或多次■

+匹配其前面的字符至少一次正则表达式(2)多字符匹配{n}匹配其前面的字符n次{n,}匹配其前面的字符n次以上{n,N}匹配其前面的字符n~N次位置匹配^匹配行首$匹配行尾正则表达式举例列出当前目录下的所有子目录ls

-al|grep

"^d“列出以数字作为文件名的所有文件ls|grep

"^[0-9]*$“列出文件file中包含的所有URL行cat

file|egrep

"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*([(/~?)\.-]\w*)*$"列出文件file中包含的所有Email地址行cat

file|egrep

"^\w(-?.?\w*)*@(\w+(-\w+)*)(\.(\w+(-\w+)*))*"sed概述Sed=Stream

Editor,非交互式的流编辑器用法:sed[-n][-e"script"][-f

script_file]-n:不显示输出结果-e:在命令行中使用脚本-f:指定脚本文件名file:输入文件名Sed的脚本的基本格式如下:[address1

[,address2]

]

command

[argument]address:行号或者行条件command:是要执行的命令argument:是命令的参数sed的简

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论