这次小编给大家整理了编写Windows下的G.729插件Unix系统,本文共7篇,供大家阅读参考。

篇1:编写Windows下的G.729插件Unix系统
不知道为什么Windows附带G.723的插件,却没有G.729的,很是郁闷,于是花了不少时间写了个,一直都是在 Linux 编程,到了Windows下反而很不习惯,本来应该更方便的东西反倒搞得很复杂,教训大le 需要准备的东西:G.729的代码或者连接库(VoiceAge提供免费的库
不知道为什么Windows附带G.723的插件,却没有G.729的,很是郁闷。于是花了不少时间写了个,一直都是在Linux编程,到了Windows下反而很不习惯,本来应该更方便的东西反倒搞得很复杂,教训大le
需要准备的东西:G.729的代码或者连接库(VoiceAge提供免费的库),Win DDK。
因为在Windows中音频的存储格式一般都是wav,所以首先要了解wav的文件格式,有专门的文章介绍这个,在这里就不多说了。G.729的wav格式可参考这个
WAVEFORMATED FormatG729 =
{
WAVE_FORMAT_MSG729, // wFormatTag,微软定义了很多wav的标签,这是其中一个(44),但是在我的系统里编译的时候却找不到这个标签,所以我用了另外一个,详细定义可查看mmreg.h这个文件
1, // nChannels,单声道/多声道,1表示单声道
8000, // nSamplesPerSec,采样频率
1000, // nAvgBytesPerSec,码率,我用的是8kbits/s的编解码
10, // nBlockAlign,字节为单位,因为编码源是160字节为单位的pcm16bit的音频流,按16:1的压缩率,编码后就是10字节
0, // wBitsPerSample,没用
2 // cbSize,一般就是wSamplesPerBlock(我用的是80)的长度,
}
这个更详细的介绍可以在微软的msdn关于如何编写acm driver的文章里找到,
接下来就要用win ddk了,记住一定要装上windbg,很好用的调试工具。不过在调试状态下录音然后放出来的声音都是噪音,很受不了。
首先要选好跟你的系统匹配的编译环境。接下来就要写sources文件,类似Linux下的makefile文件,定义一下连接库,源文件等,在ddk中找个范例修改一下就好了。还有几个必须的文件如makefile、安装信息文件、rcv文件、resource template文件、def文件都是参考范例写一下就好了。文件齐备了后,直接build就好了。
ACM是一个通用的音频编解码管理器,所以有固定的接口函数:DriverProc,调用插件函数入口;
几个主要的消息:DRV_OPEN,打开插件;DRV_CLOSE,关闭插件;DRV_CONFIGURE,配置插件;ACMDM_STREAM_OPEN,确定是编码流还是解码流;ACMDM_STREAM_CLOSE,关闭音频流;ACMDM_STREAM_CONVERT,调用编/解码函数。
编码时,一般输入的是pcm16bit的音频流。解码输出的也应该是pcm16bit的音频流,如果是8bit的,还需要进行转换。
G.729的编解码函数因为版权问题,我就不细说了,只要设定好匹配的参数(如码率,samplesperblock等),然后封装好填写到stream open消息的处理函数中就行了。
编译通过后你会得到一个*.acm的文件,把它拷贝到win/system32目录下,然后把相关信息写入注册表,就可以使用了。
原文转自:www.ltesting.net
篇2:Unix系列shell程序编写(下)Windows系统
[code:1:0fdddfdb40] Until语句 While语句中,只要某条件为真,则重复执行循环代码,until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止, Until语句的结构如下: untilcommand do command command …… done 可以用until语句
[code:1:0fdddfdb40]
Until语句
While语句中,只要某条件为真,则重复执行循环代码,until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止。
Until语句的结构如下:
until command
do
command
command
… …
done
可以用until语句替换上面备份程序的while语句,完成同样的功能:
until [ $ANS != Y -a $ANS != y ]
for 循环
在介绍for循环之前,我们要学个非常有用的unix命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在$1后为$2,在$2后面为$3等。在 shift命令执行前变量$1的值在shift命令执行后就不可用了。
示例如下:
#测试shift命令(x_shift.sh)
until [ $# -eq 0 ]
do
echo “第一个参数为: $1 参数个数为: $#”
shift
done
执行以上程序x_shift.sh:
$./x_shift.sh 1 2 3 4
结果显示如下:
第一个参数为: 1 参数个数为: 3
第一个参数为: 2 参数个数为: 2
第一个参数为: 3 参数个数为: 1
第一个参数为: 4 参数个数为: 0
从上可知shift命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用until和shift命令计算所有命令行参数的和。
#shift上档命令的应用(x_shift2.sh)
if [ $# -eq 0 ]
then
echo “Usage:x_shift2.sh 参数”
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo “sum is: $sum”
执行上述程序:
$x_shift2.sh 10 20 15
其显示结果为:
45
shift命令还有另外一个重要用途,Bsh定义了9个位置变量,从$1到$9,这并不意味着用户在命令行只能使用9个参数,借助shift命令可以访问多于9个的参数。
Shift命令一次移动参数的个数由其所带的参数指定。例如当shell程序处理完前九个命令行参数后,可以使用shift 9命令把$10移到$1。
在熟悉了shift命令后,我们一起看看,Bsh程序中非常有用的for循环语句,这种循环同上面说的while和until循环不同,for语句中的循环是否执行并不由某个条件的真和假来决定,决定for循环是否继续的条件是参数表中是否还有未处理的参数。
For语句的结构如下:
for variable in arg1 arg2 … argn
do
command
command
… …
done
下面是for循环的简单例子:
for LETTER in a b c d
do
echo $LETTER
done
程序执行结果如下:
a
b
c
d
在上面计算参数和的例子中,我们可以用for循环,实现如下:
#测试 for 程序(x_for.sh)
if [ $# -eq 0 ]
then
echo “Usage:x_for.sh 参数… …”
exit 1
fi
sum=0
for I in $*
do
sum=`expr $sum + $I`
done
echo “sum is: $sum”
中断循环指令
在程序循环语句中,我们有时候希望遇到某中情况时候结束本次循环执行下次循环或结束这个循环,这就涉及到两条语句:continue和break。continue命令可使程序忽略其后循环体中的其他指令,直接进行下次循环,而break命令则立刻结束循环,执行循环体后面的的语句。
#测试continue
I=1
while [ $I -lt 10 ]
do
if [ $I -eq 3 ]
then
continue
fi
if [ $I -eq 7 ]
then
break
fi
echo “$I\c”
done
执行上面程序,结果如下:
12456789
与或结构
使用与/或结构有条件的执行命令
Shell程序中可以使用多种不同的方法完成相同的功能,例如until和while语句就可以完成相同的功能,同样,除了if-then-else结构可以使命令有条件的执行外,$$和||操作符也能完成上述功能。在C语言中这两个操作符分别表示逻辑与和逻辑或操作。在Bourne Shell中,用&&连接两条命令的含义只有前面一条命令成功执行了,后面的命令才会执行。
&&操作的形式为:
command && command
例如语句:
rm $TEMPDIR/* && echo “Files suclearcase/” target=“_blank” >ccessfully removed“
只有rm命令成功执行以后,才会执行echo命令。若用if-then语句实现上述功能,形式为:
if rm $TEMPDIR/*
then
echo ”Files successfully removed“
fi
相反,用||连接两条命令的含义为只有第一条命令执行失败才执行第二条命令,例如:
rm $TEMPDIR/* || echo ”File were not removed“
上面语句的等价形式为:
if rm $TEMPDIR/*
then
:
else
echo ”Files were not removed“
fi
这两种操作符可以联合使用,如在下面的命令行中,只有command1和command2执行成功后,command3才会执行:
command1 && command2 && command3
下面的命令行表示只有command1成功执行,command2不成功执行时,才会执行command3。
&&和||操作符可以简化命令条件执行的格式,但一般只用于一条命令的条件执行。如果许多命令都使用这两个操作符,那么整个程序的可读性将变的很差,所以在多条命令的条件执行时,最好采用可读性好的if语句。
函数
现在我们介绍Shell程序中的函数部分,基本上任何高级语言都支持函数这个东西,能让我们胜好多事情的东西,至少省的频繁的敲击相同的东西,好了come on
Shell程序中的函数
函数又叫做子程序,可以在程序中的任何地方被调用,其格式如下:
函数名字
{
command
... ...
command;
}
Shell程序的任何地方都可以用命令 ”函数名字“ 调用,使用函数的好处有两点,一点是使用函数可以把一个复杂的程序化为多个模块,易于管理,符合结构化程序的设计思想,另一个好处是代码的重用。
Shell函数和Shel程序比较相似,它们的区别在于Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此,在当前Shell中可以看到Shell函数对变量的修改。在任何Shell中都可以定义函数,包括交互式Shell。
例如:
$dir() {ls -l;}
结果是我们在$后面打dir,其显示结果同ls -l的作用是相同的。该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令:
$unset dir
下面的例子说明了函数还可以接受位置参数:
$dir(){_
>echo ”permission ln owner group file sz last access
>ls -l $*;
>}
运行 dir a* 看产生什么结果
参数a*传递到dir函数中并且代替了$*
通常Shell程序将在子Shell中执行,该程序对变量的改变只在子Shell中有效而在当前Shell中无效。“.”命令可以使Shell程序在当前Shell中执行。用户可以在当前Shell中定义函数和对变量赋值。通常用下面命令来重新初使化.profile对Shell环境的设置。
$ . .profile
由于看到这部分相对简单,我们还是顺便说说trap好了
使用trap命令进行例外处理
用户编写程序在程序运行时可能会发生一些例外情况,比如执行该程序的用户按中断键或使用kill命令,或者控制终端突然与系统断开等。unix系统中的上述情况会使系统向进程发一个信号,通常情况下该信号使进程终止运行。有时侯用户希望进程在接到终止信号时进行一些特殊的操作。若进程在运行时产生一些临时文件,又因接受到的信号而终止。那么该进程产生的临时文件将保留下来。在bsh中,用户可以使用trap命令修改进程接收到终止信号时进行的默认操作。
trap命令格式如下:
trap command_string signals
多数系统中共有15种发给进程的信号,默认情况下大多数信号都会使程序终止。用户最好查阅自己系统的文挡,看看本系统内使用的信号种类。除了信号为9(真正的kill信号)不能使用trap命令外,其他信号所带来的操作都可以用trap命令进行指定。下面是trap命令中经常使用的几种信号:
信号 功能
1 挂起
2 操作中断
15 软终止(kill信号)
若命令串中包含不只一条命令,必须使用引号将整个命令括起来,具体是单引号还是双引号,由用户是否需要变量替换决定。“ ”替换,' '不替换。
使用下面trap命令可以使程序在接收到挂起、中断或kill信号时,首先把临时文件删除,然后退出:
trap “rm $TEMPDIR/* $$;exit” 1 2 15
在上面例子中,当Shell读取trap命令时,首先对$TEMPDIR和$$进行变量替换,替换之后的命令串将被保存在trap表中,若上例中trap命令使用单引号时,trap命令执行时候,不进行变量替换,而把命令串 rm $TEMPDIR/* $$;exit 放到trap表中,当检测到信号时,程序解释执行trap表中的命令串,此时进行变量替换,
前面变量$TEMPDIR和$$的值为执行trap指令时候的值,后一种情况中变量的值为程序接收到信号时候的值,所以 “、'一定要区分仔细。
下面命令的含义为用户按二次中断键后,程序才终止:
trap 'trap 2' 2
一般trap命令中的命令串中几乎都包含exit语句,上面rm的例子若无exit语句,接收到信号rm命令执行完后程序将挂起。但有时用户也需要程序在接到信号后挂起,例如当终端和系统断开后,用户发出挂起信号,并执行空命令,如下:
trap : 1
若用户想取消前trap指令设置的命令串,可以再执行trap命令,在命令中不指定命令串表示接收到信号后进行默认的操作,命令如下:
trap 1
规范Shell
获取UNIX类型的选项:
unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:
command -options parameters
如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为:
getopts option_string variable
其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。
下面代码说明了date命令中怎么使用getopts命令处理各种选项,该程序除了完成unix的标准命令date的功能外,还增加了许多新的选项。
#新date程序
if [ $# -lt 1 ]
then
date
else
while getopts mdyDHMSTJjwahr OPTION
do
case $OPTION
in
m)date '+%m';;
d)date '+%d';;
y)date '+%y';;
D)date '+%D';;
H0date '+%H';;
M)date '+%M';;
S)date '+%S';;
T)date '+%T';;
j)date '+%j';;
J)date '+%y%j';;
w)date '+%w';;
a)date '+%a';;
h)date '+%h';;
r)date '+%r';;
\?)echo ”无效的选项!$OPTION“;;
esac
done
fi
有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。
下面的例子,实现拷贝一个文件,并给文件赋一个新的名字。-c选项指定程序拷贝的次数,-v选项要求显示新创建文件的文件名。
#--拷贝程序
COPIES=1
VERBOSE=N
while getopts vc:OPTION
do
case $OPTION
in
c)COPIES=$OPTARG;;
v)VERBOSE=Y;;
\?)echo ”无效参数!“
exit 1;;
esac
done
if [ $OPTIND -gt $# ]
then
echo ”No file name specified“
exit 2
fi
shift 'expr $OPTIND - 1'
FILE=$1
COPY=0
while [ $COPIES -gt $COPY ]
do
COPY='expr $COPY + 1'
cp $FILE $ {FILE} $ {COPY}
if [ VERBOSE = Y }
then
echo ${FILE} $ {COPY}
fi
done
规范Shell:
我们知道环境变量PS1是提示符,看下面程序chdir:
if [ ! -d ”$!“ ]
then
echo ”$1 is not a directory“
exit 1
fi
cd $1
PS1=”'pwd'>“
export PS1
我们执行:
$chdir /usr/ice666
结果提示符号变成/usr/ice666>了吗?没有,为什么?
原因在于:chdir在子Shell中执行,变量PS1的修改在当前Shell中也不会起作用,若要chdir完成意想中的功能,必须在当前Shell中执行该命令。最好的方法就是把其改成一个函数并且在.profile文件中定义。但若要把函数放到单个文件中并在当前Shell中执行,则需要使用 . 命令,并将chdir重写成一个函数,把其中的exit改写成return。下面代码是 .ice_ps的内容:
#--提示符
chdir()
{
if [ !-d ”$1“ ]
then
echo ” $1 is not a directory“
return
fi
cd $1
PS1=”'pwd'>“
export PS1;
}
然后我们在.profile文件中加入下面语句
.ice_ps
然后在切换目录的时候,我们用chdir命令,结果是什么呢,自己实验好了!
调试Shell程序
1>调试shell程序
用户刚编写完Shell程序中,不可避免的会有错误,这时我们可以利用Bsh中提供的跟踪选项,该选项会显示刚刚执行的命令及参数。用户可以通过set命令打开-x选项或在启动Shell使用-x选项将Shell设置成跟踪模式。例如有下面代码ice_tx:
if [ $# -eq 0 ]
then
echo ”usage:sumints integer list“
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum='expr $sum + $1'
shift
done
echo $sum
我们用跟踪模式运行:
$sh -x ice_tx 2 3 4
结果显示:
+[ 3 -eq 0 ]
+sum=0
+[ 3 -eq 0 ]
+expr 0+2
+sum=2
+shift
+[ 2 -eq 0 ]
+expr 2+3
+sum=5
+shift
+[ 1 -eq 0 ]
+expr 5+4
+sum=9
+[ 0 -eq 0 ]
+echo 9
9
从上面可以看出,跟踪模式下Shell显示执行的每一条命令以及该命令使用的变量替换后的参数值。一些控制字如if、then、until等没显示。
2>命令分组
Shell中若干命令可以组成一个单元一起执行。为了标识一组命令,这些命令必须放到”()“或”{}“中。放在”()“中的命令将在子Shell中运行,而放在”{}“中的命令将在当前Shell中运行。子Shell中运行的命令不影响当前Shell的变量。当前Shell中运行的命令影响当前Shell的变量。
$NUMBER=2
$(A=2;B=2;NUMBER='expr $A+$B';echo $NUMBER)
结果为:4
$echo $NUMBER
结果为:2
如果把上面的()变成{},结果会是怎么样的呢?
3>使用Shell分层管理器shl
UNIX是一个多道程序设计的操作系统,一些UNIX系统利用这一特性提供了Shell层次管理器shl。使用shl用户一次可以打开多个层次的Shell,其中活跃的Shell可以从终端上获得输入。但所有Shell的输出都可在终端上显示,除非显示被禁止。
多个Shell中有一个为shl,当用户在某个Shell中工作时,可以通过使用特殊字符(一般为Ctrl+z)返回shl。为了同其他Shell区别,shl中提示符为”>>>“。当用户工作在Shell层次管理器中时,可以创建、激活和删除Shell,下面是shl中使用的命令。
create name 产生名为name的层次
delete name 删除名为name的层次
block name 禁止名为name的层次的输出
unblock name 恢复名为name的层次的输出
resume name 激活名为name的层次
toggle 激活近来经常使用的层次
name 激活名为name的层次
layers [-l] name 对于表中的每个层次,显示其正在运行的进程的进程号,-l选项要求显示详细信息。
help 显示shl命令的帮助信息
quit 退出shl以及所有被激活的层次
总结
在前面我们主要介绍了sh的变量、基本语法、程序设计等。如果掌握了这些内容,在学习其他UNIX下编程语言的时候,相信有一定的好处,我们说了,在大多数的UNIX中都提供Bourn Shell,而且很少有象sh这样强大的脚本编辑语言了,是系统管理员和程序员的一笔财富,并且不需要额外的软件环境,对文件等处理借助unix命令,实现起来比c实现还要简单。
[/code:1:0fdddfdb40]
bjchenxu 回复于:-07-14 16:07:52太老了吧,而且shell版中早就加为精华了,是否重复???
alphaliu 回复于:2003-07-14 16:57:41不管重复与否,先up
lwm_13 回复于:-03-06 21:43:15up
原文转自:www.ltesting.net
篇3:怎么编写 crontab 文件Windows系统
请教各位高手: 怎么编写crontab文件.完成以下功能: 每周自动执行将一文件夹的内容备份,并且文件名字以生成的日期命名. 谢谢!!! weixinc 回复于:2004-02-20 13:57:09 4223**1/opt/back_file.sh/dev/null2/dev/null 假设备份程序为back_file.sh 将上述语句加
请教各位高手:
怎么编写crontab 文件.完成以下功能:
每周自动执行将一文件夹的内容备份,并且文件名字以生成的日期命名.
谢谢!!!
weixinc 回复于:2004-02-20 13:57:0942 23 * * 1 /opt/back_file.sh > /dev/null 2>/dev/null
假设备份程序为back_file.sh
将上述语句加入crontab后将在每周一的23点42分开始执行
黄虫 回复于:2004-02-20 14:07:05谢谢!
backfile.sh 怎么编写,我对sh 语句不懂
weixinc 回复于:2004-02-20 14:36:23#!/bin/csh
set TargetDir=`date '+%Y%m%d'`
echo $TargetDir
cp -r /tmp/a /tmp/”$TargetDir“
黄虫 回复于:2004-02-20 14:51:27谢谢!
我试试!
黄虫 回复于:2004-02-20 15:32:18实现不了,shell都没办法调用
zhongsy 回复于:2004-02-20 15:44:12[quote:36917a0f49=”weixinc“]42 23 * * 1 /opt/back_file.sh > /dev/null 2>/dev/null
假设备份程序为back_file.sh
将上述语句加入crontab后将在每周一的23点42分开始执行[/quote:36917a0f49]
/dev/null 2>/dev/null
有什么用?
黄虫 回复于:2004-02-20 16:42:09backfile.sh 不能执行
beginner-bj 回复于:2004-02-20 20:23:01chmod +x backfile.sh
黄虫 回复于:2004-02-23 09:49:08权限是够了.运行是提示不能执行
lycxlove 回复于:2004-02-23 10:10:31环境变量的问题吧
黄虫 回复于:2004-02-23 10:17:21能不能说详细点,谢谢!
黄虫 回复于:2004-02-23 10:47:48当我运行backfile 时,
提示:cp: /tmp and /tmp are identical
得不到targetdir
黄虫 回复于:2004-02-23 11:35:44在backfile.sh 语句中.是不是还要添加 mkdir
但是命令出错!
怎么办?
coolbzk 回复于:2004-02-23 11:42:55我也想知道啊 ,呼唤高手,555~~~
黄虫 回复于:2004-02-23 11:57:17高手!!斑竹帮帮忙!
黄虫 回复于:2004-02-23 12:24:59高手!帮帮忙呀
C.Arthur 回复于:2004-02-23 12:34:02backfile.sh怎么写的?贴一下
黄虫 回复于:2004-02-23 13:01:32#!/bin/sh
set TargetDir=`date '+%Y%m%d'`
echo $TargetDir
cd /tmp
mkdir $TargetDir
cp -r /tmp/ /tmp/”$TargetDir“
就是不能实现
C.Arthur 回复于:2004-02-23 13:33:13#!/bin/sh
TargetDir=`date '+%Y%m%d'`
export TrggetDir
echo $TargetDir
cd /tmp
mkdir $TargetDir
cp -r /tmp/ /tmp/”$TargetDir“
sqwen 回复于:2004-02-23 13:44:02#!/bin/bash
BackupDir=/export/home/sqwen/data #请替代为你想备份的数据目录
TargetDir=/tmp #请替代为你想备份到的地方,当然你不会/tmp吧,如果选了这个目录备份就没有意义了,因为重启以后备份数据就会丢失
TargetFile=`date +%y%m%d`
cd $TargetDir
tar cvfz ${TargetDir}.tgz $BackupDir
#如果你实在是想直接拷贝而不压缩的话,那就cp -r $BackupDir $TargetDir/$TargetFile,注意这是$TargetFile不是文件而是目录了
黄虫 回复于:2004-02-23 13:56:12还是有点问题,
怎么编写 crontab 文件Windows系统
,
提示:
20040223134000 is not an identifier
黄虫 回复于:2004-02-23 14:02:55[quote=”sqwen“]#!/bin/bash
BackupDir=/export/home/sqwen/data #请替代为你想备份的数据目录
TargetDir=/tmp #请替代为你想备份到的地方,当然你不会/tmp吧,如果选了这个目录备份就没有意义了,因为重启以后备份数据就?.........[/quote
不是在/tmp下。运行是出现
20040223134000 is not an identifier
黄虫 回复于:2004-02-23 14:35:38[quote:fc81155667=”C.Arthur“]#!/bin/sh
TargetDir=`date '+%Y%m%d'`
export TrggetDir
echo $TargetDir
cd /tmp
mkdir $TargetDir
cp -r /tmp/ /tmp/”$TargetDir“[/quote:fc81155667]
还有点问题。提示:
./backfile.sh 20040223141800 not found
为什么?但是其下面已经有内容了
sqwen 回复于:2004-02-23 14:40:13我刚才用我自己的程序测试了一下,有点小bug,修正一下
[code:1:0a52aa6491]
#!/bin/bash
BackupDir=/export/home/sqwen/data
TargetDir=/export/home/sqwen/backupdata
DateFile=`date +%y%m%d`
cd $BackupDir
cd ..
tar cvfz ${DateFile}.tgz $(basename $BackupDir)
mv ${DateFile}.tgz $TargetDir
[/code:1:0a52aa6491]
这个脚本我亲自测试过,不会有问题
黄虫 回复于:2004-02-23 15:12:10[quote:360b985750=”sqwen“]这个脚本我亲自测试过,不会有问题[/quote:360b985750]
对,这种方式没错,我也试过了
谢谢!
原文转自:www.ltesting.net
篇4:Unix系列shell程序编写Windows系统
MI LY: ” times=“” new=“” roman?;=“” mso-fareast-font-family:=“” 宋体;=“” mso-font-kerning:=“” 1.0pt;=“” mso-ansi-language:=“” en-us;=“” mso-fareast-language:=“” zh-cn;=“” mso-bidi-language:=“” ar-sa?=“”>Shell 是什么 ? 任何发明都具有供用户
MILY: “ times=”“ new=”“ roman?;=”“ mso-fareast-font-family:=”“ 宋体;=”“ mso-font-kerning:=”“ 1.0pt;=”“ mso-ansi-language:=”“ en-us;=”“ mso-fareast-language:=”“ zh-cn;=”“ mso-bidi-language:=”“ ar-sa?=”“>Shell是什么?
任何发明都具有供用户使用的界面,UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多),
Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。
为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。
下载地址,见下:(不断更新中)
01.pdf
02.pdf
03.pdf
04.pdf
05.pdf
06.pdf
07.pdf
08.pdf
............不断上传中..........
原文转自:www.ltesting.net
篇5:Windows系统下怎样添加硬件?
由于Windows 98以后的Windows系统提供了即插即用功能,如果添加的是即插即用硬件,则Windows将替你完成大部分的添加工作,如果不是,也可以让Windows帮助完成大部分工作,
不论是否即插即用硬件,如果添加后出现问题,都可以利用Windows发现冲突的原因(大部分冲突是由于IRQ、端口或DMA地址分配有问题引起的),并且可以用人工设置方式将新硬件分配到不同的地址,
一般如果计算机添加了新的硬件设备,在启动计算机时Windows会进行自动搜索,并启动“添加硬件向导”完成硬件安装。
也可以在启动计算机后,按照以下步骤添加新硬件:进入“控制面板”,单击“添加新硬件”图标,启动Windows“添加新硬件”向导。按照“向导”指引可以轻松完成几乎所有硬件的安装。
篇6:Linux下安全工具Windows系统
hubertzou 译 原文: Linux Focus Georges Tarbouriech 摘要: 安全是系统管理员忧虑的主要问题之一,然而,由于internet引发的侵入危险变得越来越高. 据统计,如果联接的用户数量增加,骇客的数量随之增加.因此,安全工具呈指数增加.再一次多谢自由软件社区,因为
hubertzou 译
原文:LinuxFocus Georges Tarbouriech
摘要:
安全是系统管理员忧虑的主要问题之一,然而,由于internet引发的侵入危险变得越来越高.
据统计,如果联接的用户数量增加,骇客的数量随之增加.因此,安全工具呈指数增加.再一次多谢自由软件社区,因为他们给我们提供了我们能见到的最好的工具和大量的文档.
在本文结束部分的参考文献区你将会发现许多有趣的联接,显而易见地,本文将要提到的不可能没有疏漏之处,我提到的只是我挑选的一些好工具.
这篇文章不但写给个人用户,同样也是给系统管理员提供的,尽管一些工具是为保护主机和提高网络安全专门设计的.大部分工具可以在许多unix上工作(如果不是全部的unix上),不管这些unix是商业的还是免费的.
最后,这篇文章不是一篇”如何使你的网络或主机安全“的文章,而是一篇关于你能够(必须)用来提高一个网络或机器安全性的各种工具的介绍.
一、通用的工具
让我们把这部分称为”白帽子保护红帽子,击退黑帽子的工具(tools for whitehats to protect redhat from blackhats)“:-).大多数linux发行版(不仅仅是redhat)都保含了一些好的安全工具,它们被用来使你的机器更加安全.
在这些工具中,我们能数出TCPWrapper,PAM,影子口令工具等,因为它们是发行版的一部份,你可以找到关于它们的许多东西:HOWTO,man手册,所以我们不想在它们身上化太多时间.
让我们从影子口令工具开始,简单来说,它们允许口令加密,文件/etc/passwd被文件/etc/shadow代替.
比影子口令工具更精致的是PAM,就象名字所说的那样,这是另外一种认证方法,被用来配置对服务的访问控制.
可以在一些文件中定义许多限制,这样能容易地进行管理.这些文件通常放在/etc/pam.d目录中.
TCPWrapper,简单来说,是通过ip地址或主机名来限制服务访问权限.倚靠两个文件来决定容许访问还是拒绝访问,这两个文件是/etc/host.allow和/etc/host.deny
TCPWrapper可以配置为两种工作模式:通过运行看守进程,或者是修改/etc/inetd.conf文件.如果你的unix系统没有包含TCPWrapper,你可以从ftp://ftp.porcupine.org/pub/security/获得它.
现在,我要告诉你们,为什么我不详悉介绍上面提到的这些工具,因为有一个工具可以完成上叙所有的功能,这就是Bastille-Linux,如果你只想安装一个安全工具,那么就安装它吧,目前的常见的linux版本还没有包含它, 但你可以到bastille-linux.sourceforge.net网站上下载.
顺便说一下,我们不会在本文介绍Bastille-Linux,这样做毫无意义,因为我的同事在九月份的LinuxFocus上有一篇相当不错的文章已经介绍了它.他已经介绍了所有的东西.去那看看吧,让我们把Bastille-Linux加入你生活中必不可少的重要工具中吧!
另外一个常用的来提高安全性的工具是xinetd,它存在于www.xinetd.org,对不起,我也不打算介绍它,同样是是因为我的同事在十一月份的LinuxFocus上做完了这项工作.
现在,让我们来看一看一些特别的东西.
二、防火墙工具
自由软件Linux带有把你机器变成防火墙的软件.2.2内核是iptables,而2.0内核则是ipfwadm.为了使iptables或ipfwadm工作,内核必需正确选择选项进行编译.关于这个问题,除了HOWTOS,还有很多相关文章,所以,同样我不打算多提.
简单地说,我们可以把防火墙看作包过滤工具,工作最重要的部分是关心防火墙的配置,同样,一个错误配置的防火墙会变得非常危险.
不管怎么说,防火墙相当重要.
举个例子来说,Bastille-Linux可以给你提供一个基于ipchains的防火墙.
如果你访问www.linuxapps.com,并在搜索区中键入”firewall“,你至少能得到40个以上的答案.其中许多是基于ipchains或ipfwadm管理的图形化界面,另外一些是真正的大工具,含有大量的功能,举个例子,象T.REX,www.opensourcefirewall.com上的工具就是这样的东西.再提醒一次,一个防火墙在一个网络中必不可少,但是网络安全不能仅仅依靠它,告诉你,一个骇客可以在十五分钟之内攻破它.
三、端口扫描
在这里我们接触问题的核心部分,这个思想是:象一个骇客干的那样,使用同样的工具,来监测你机器或网络的弱点所在.
在这个领域,我们能够在两个伟大的工具上受益,但还有其它更多的.
第一个叫作nmap,你可以从www.insecure.org上下载到,同时还有大量的信息和链接等等.
用nmap你可以检查你的网络或机器哪些端口是开放的.当然,你可以用其它的命令做到这点,例如lsof或netstat,但是只能检测你自己的机器.显而易见的,nmap当然也可以检查你自己的机器.
nmap能提供给你许多信息,例如,它能告诉你运行的是哪种操作系统,通知你所开放的端口的危险性,最后,至少,nmap相当容易使用.
nmap既可在shell下运行,也可以通过一个叫nmapfe的图形界面来运行.这个图形界面是基于gtk库的,nmap的当前版本是2.53,它可以在许多unix平台上运行,提供原代码,rpm包,带或不带图形界面.
nmap是系统管理必不缺少的工具.
多谢Fyodor先生,以及恭贺他的伟大工作.
第二个叫作nessus,可从网站www.nessus.org上下载,nessus使用客户/服务器结构来工作,源代码遵循posix标准,能在许多unix版本上运行.甚至还有基于win32的客户端.nessus依赖nmap(要知道,没有nmap,nessus就不能运行),GUI客户端还需要GTK库函数的支持.
nessus当前版本是1.06,通过nessus,你可一用一个命令扫描整个网络.这个命令就是网络地址,例如,在目标框中键入192.168.1.0/24,将会扫描整个子网的255台机器.
尽管nessus比nmap复杂不少,但它不但容易使用,功能很多.比方说,它可以生成报告,比较各报告的差异...,另外一个功能相当有趣:nessus为端口扫描中发现的问题提供解决方案,只要这些机器是unix系统,这些建议通常有用,对其它操作系统,就没这么恰当,但这不是一个问题.
下面是一台非常容易受攻击的机器的例子
nessus还有另一项伟大的功能,它可以运行插件,这样,每次在任何地方发现新的安全漏洞,它都可以很快升级.
nessus是另一个系统管理真的需要的工具,Deraison先生和Merci beaucoup做的棒极了.
两个工具都在一个linux机器和其它不同操作系统的网络中测试过,有Linux RH 6.2, Irix 6.5.7, Solaris 2.6, NeXTStep 3.3,QNX RT, BeOS 5.0, Amiga OS 3.5,Not Terminated 4.0.在大多数平台上测试结果给人留下深刻印象,当然Amiga系统没有真正被认证,(因为它看起来象一台打印机或路由器!),但是有谁现在的网络中还有这种操作系统呢(除了我们)?
不管怎么说,整些工具是今天网络中必须有的工具.
为了结束这个章节,让我们来提一提其它一些工具象SARA(www-arc.com/sara/),或者是它的父辈SATAN(www.porcupine.org/satan/)或AINT(www.wwdsi.com).它们不但是端口扫瞄器而且它们都对提高网络安全非常有用.
四、嗅探系统
有些工具能发现端口扫描或入侵.标准的系统管理不能没有这种工具(这有点偏执!).
第一套工具集来自算盘工程.你可以从www.psionic.com获得这些工具.其中包含三个工具:
clearcase/” target=“_blank” >cccccc border=1>
logcheck,portsentry和hostsentry.原文转自:www.ltesting.net
篇7:SCO下的时间问题。Windows系统
structtm*ltm intQSSJ_y,QSSJ_m,QSSJ_d,QSSJ_h,QSSJ_f,QSSJ_s longcur_time,Intime,QSSJ_SC charfirsttime[30],tmp2[255] time(cur_time) ltm=localtime(cur_time) sprintf(firsttime,%04d%02d%02d%02d%02d%02d, ltm-tm_year+1900,\ ltm-tm_mon+1,\ ltm-tm_m
struct tm *ltm;
int QSSJ_y,QSSJ_m,QSSJ_d,QSSJ_h,QSSJ_f,QSSJ_s;
long cur_time,Intime,QSSJ_SC;
char firsttime[30],tmp2[255];
time(&cur_time);
ltm=localtime(&cur_time);
sprintf(firsttime, “%04d%02d%02d%02d%02d%02d”,
ltm->tm_year+1900, \
ltm->tm_mon+1,\
ltm->tm_mday,\
ltm->tm_hour, \
ltm->tm_min, \
ltm->tm_sec);
QSSJ_y=ltm->tm_year+1900;
QSSJ_m=ltm->tm_mon+1;
QSSJ_d=ltm->tm_mday;
QSSJ_h=ltm->tm_hour;
QSSJ_f=ltm->tm_min;
QSSJ_s=ltm->tm_sec;
QSSJ_SC = (((((QSSJ_y-100)*12+QSSJ_m)*31+QSSJ_d-1)*24+QSSJ_h)*60+QSSJ_f)*6
printf(“11111111 InTime=[%s],qssj_sc=%ld\r\n”,firsttime,QSSJ_SC);
ltm=localtime(&QSSJ_SC);
sprintf(firsttime, “%04d-%02d-%02d %02d:%02d:%02d”,
ltm->tm_year+1900, \
ltm->tm_mon+1,\
ltm->tm_mday,\
ltm->tm_hour, \
ltm->tm_min, \
ltm->tm_sec);
printf(“22222222 InTime=[%s],qssj_sc=%ld\r\n”,firsttime,QSSJ_SC);
运行结果为:
11111111 InTime=[20021215132903],qssj_sc=1035658399
22222222 InTime=[2002-10-27 02:53:19],qssj_sc=1035658399
为什么第二个时间是错的?
月冷西湖 回复于:2002-12-15 15:02:11sprintf(tmp2,“20%02ld%02ld%02ld%02ld%02ld%02ld”,
(QSSJ_SC/60L/60L/24L/31L/12L+100L)%100L,
QSSJ_SC/60L/60L/24L/31L%12L+1L,
QSSJ_SC/60L/60L/24L%31L+1L,
QSSJ_SC/60L/60L%24L,
QSSJ_SC/60L%60L,
QSSJ_SC%60L);
这样就解决问题了,
SCO下的时间问题,
电脑资料
《SCO下的时间问题。Windows系统》()。Windows系统。
小小狗 回复于:2002-12-16 14:30:18一定都看不懂,可是解释一下吗?谢谢
rengongpu 回复于:2002-12-16 16:10:49难首是自己给自己出题吗?
原文转自:www.ltesting.net
★Sco Unix下用dbxtra调试C程序Windows系统
文档为doc格式