Declare语句中的Alias子句是一个可选的部分,用户可以通过它所标识的别名对动态 库中的函数进行引用。例如,在下面的语句中,声明了一个在VB中名为MyFunction的函数,而它在动态库Mydll.dll中最初的名字是MyFunctionX。
Private Declare Function MyFunction Lib "Mydll.dll" Alias "MyFunctionX" ( ) As Long
需要注意的是,Alias子句中的函数名是大小写敏感的,也就是说,必须与函数在生成时的声明(如在C源文件中的声明)一致。这是因为32位动态库与16位动态库不同,其中的函数名是区分大小写的。同样道理,如果没有使用Alias子句,那么在Function(或Sub)后的函数名也是区分大小写的。
通常在以下几种情况时需要使用Alias子句:
A.处理使用字符串的系统Windows API过程
如果调用的系统Windows API过程要使用字符串,那么声明语句中必须增加一个Alias 子句,以指定正确的字符集。包含字符串的系统Windows API函数实际有两种格式:ANSI和Unicode( 关于ANSI和Unicode两种字符集的区别将在后面详细阐述)。因此,在Windows头文件中,每 个包含字符串的函数都同时有ANSI版本和渣禅Unicode版本。例如,下面是SetWindowText函数 的两种C语言描述。可以看到,第一个描述将函数定义为SetWindowTextA,尾部的"A" 表明它是一个ANSI函数:
WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString)
第二个描述将它定义为 SetWindowTextW, 尾部的"W" 表明它是一个Unicode 函数:
WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString)
因为两个函数实际的名称都不是"SetWindowText",要引用正确的函数就必 须增加一个Alias子句:
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal _
lpString As String) As Long
应当注意,对于VB中使用的系统WindowsAPI函数,应该指定函数的ANSI版本,因为只 有WindowsNT才支持Unicode版本,而Windows95不支持这个版本。仅当应用程序只运行 在WindowsNT平台上的时候才可以使用Unicode版本。
B.函数名是不标准的名称
有时,个别的DLL过程的名称不是有效的标识符。例如,它可能包含了非法的字符(如连 字符),或者名称是VB的关键字(如GetObject)。在这种情况下,可以使用Alias关键字。例 如, *** 作环境DLLs中的某些过程名以下划线开始。尽管在VB标识符中允许使用标识符,但是 下划线不能作为标识符的第一个字符。为了使用这种过程,必须先声明一个名称合法的过程, 然后用Alias子句引用过程的真实名称:
Declare Function lopen Lib "kernel32" Alias "_lopen" _
(ByVal lpPathName As String, ByVal iReadWrite _
As Long) As Long
在上例中,lopen是VB中使用的过程名称。而_lopen则是动态连接库中可以识别的名称。
C.使用序号标识DLL过程
除了使用名称之外,还可以使用序号来标识DLL过程。某些动态连接库中不包含过程的名称,在声明它们包含的过程时必须使用序号。同使用名称标识的DLL过程相比,如果使用序号,在最终简态的应用程序中消耗的内存将比较少,而且速度会快些。但是,一个具体的API的序号 在不同的 *** 作系统中可能是不同的。例如GetWindowsDirectory在Win95下的序号为432,而在WindowsNT4.0下为338。总而言之,如果希望应用程序能够在不同的 *** 作系统下运行,那么最好不要使用序号来标识API过程。如果过程不属于API,或者应用程序使用的范围很有 限,那么使用序号还是有好处的。
要使用序号来声明DLL过程,Alias子句中的字符串需要包含过程的序号,并在序号的前面加一个数字标记字符(#)。例如,Windowskernel中的GetWindowsDirectory函数的序号为432;可以用下面的语句来声明该DLL过程:
Declare Function GetWindowsDirectory Lib "kernel32" _
Alias "#432" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
在这里,可以使用任意的合法名称作为过程的名称,VB将用序号在DLL中寻找过程。
1、cp的常见应用场景及命令格式慎渗简cp命令是Linux最常用命令之一,可以实现单个文件/文件夹复制,多个文件/文件夹复制,创建软硬链接喊友等。
一、复制一个源文件到目标文件(夹)。
命令格式为:cp 源文件 目标文件(夹)
这个是使用频率最多的命令,负责把一个源文件复制到目标文件(夹)下。如下图所示,复制到文件夹下,则文件名保持不变,复制到文件中,则文件名变更。如果目标文件已经存在或目标文件宽裤夹中含有同名文件,则复制之后目标文件或目标文件夹中的同名文件会被覆盖。
cp命令复制一个文件
二、同时复制多个文件到目标文件(夹)下。
命令格式为:cp 源文件1 源文件2 目标文件夹 或 cp 文件* 目标文件夹
这个命令使用频率也很高。第一种命令格式可以把列出来的多个文件一次性复制到目标文件夹下,每个文件直接用空格分隔;第二种命令格式使用了通配符*,如下图所示,可以将所有以“.txt”结尾的文件都复制到文件夹testDir下。
cp命令复制多个文件
cp命令复制多个文件
三、复制源文件夹到目标文件夹下。
命令格式为:cp -r 源文件夹 目标文件夹
这个也是使用频率很高的命令,只需要记住复制文件夹一定要加“-r”参数,否则会出现“cp: omitting directory”错误。
cp命令复制文件夹
四、只有源文件较目标文件新时复制。
命令格式为:cp -u 源文件 目标文件
这个命令很实用,尤其是在更新文件时。如下图所示,只有源文件比目标文件新时,才会将源文件复制给目标文件,否则,及时执行了命令,也不会执行复制。
cp命令只文件较新时复制
五、创建文件的软链接。
命令格式为:cp -s 源文件 目标文件
也可以用ln命令实现同样的功能。当一个文件路径太深(如下述的a/b/c/d/e/orginalFile.txt),访问起来十分不方便时,就会创建这个文件的软链接,使之访问起来更方便些。软链接就相当于windows上的快捷方式。
cp命令创建软链接
六、创建文件的硬链接。
命令格式为:cp -l 源文件 目标文件
也可以用ln命令实现同样的功能。有时候,为了某种原因,需要创建一个硬链接,如下图所示。
cp命令创建硬链接
这里简单介绍下硬链接和软链接的区别。如下图所示,软连接文件(softLink.txt)和被链接文件(orginalFile.txt)所拥有的inode不相同(133827和139819),硬链接文件(hardLink.txt)和被链接的文件(orginalFile22.txt)拥有相同的inode(156981)。当被链接的文件删除时,软链接文件也无法访问了,而硬链接文件仍能正常访问。
2、cp命令强制覆盖原有文件/文件夹
如果直接使用cp,不加参数,那么一旦目标和源文件夹下有同名文件,会提示是否覆盖,需要一个一个确认,如果文件数量少还好,若是多的话,一一确认会累死的...
比如:把a目录下的文件复制到b目录
cp –r a/* b
执行上面的命令时,b存在的每个文件都会提示是否覆盖:
该 *** 作当时不停提示覆盖,要手工确认,数量太多,最后只得CTR+C取消
怎么办呢?可以加一个-f,实现cp命令强制覆盖,不再提示。
命令格式:cp –r –f a/* b/
执行上面的命令时,b存在的每个文件都不再会提示,妥啦!
3、cp命令加上-f还是提示覆盖的问题
有时加了-f了,还是会有覆盖确认提示,为啥呢?原因是有一些服务器默认安装的系统里,已经增加了别名 alias cp=’cp -i’,当你执行cp时,其实执行的是cp –i。
可以通过执行alias命令查看:
看到了吗
这种情况下,先unalias cp,具体方法三种:
第一种方法:
#vi ~/.bashrc,在alias cp=’cp -i’前加上”#”注释掉这行,:wq! 保存退出,然后重新登陆,使用cp -r -f就可以了,如下图:
第二种方法:
1) 临时取消cp的alias
先执行#unalias cp,然后执行cp –r –f a/* b/即不再出现覆盖提示了。但是下次登录还会同样情况,需要#unalias cp再次临时取消cp的alias。
以上基本就是cp命令常用场景了,而这个cp加了-f还提示覆盖的问题是很多人经常遇到的,个人推荐第二种方法,简单粗暴哦。
文件和目录 *** 作的基本命令: cat、clear、cmp、cut、diff、du、emacs、fgrep、file、grep、head、ln、less、more、pico、pwd、sort、stat、strings、tail、touch、umask、uniq、vi、wc、whatisls:ls [选项|参数] 目录名 eg:#ls -R /etc/httpd/conf/ 显示/etc/httpd/conf/目录及子目录内容
chmod:chmod [选项] mode 文件名或目录 eg:#chmod ugo+r test.log 将文件/root/test.log设为所有人皆可读取
chown:chown [选项] 用户名或组名 eg:[root@Linux test]#chown -R jake:gdlc * 将/test目录下的所有文件与子目录的拥有者都设为jake,所属组设为gdlc
chgrp:chgrp [选项] Group {文件...|目录}
eg:[root @Linux root]#chgrp -R test * 更改/root目录下的所有文件和目录的所属组为test
chattr:chattr [选项] [mode] 文件名 eg:#chattr +i /test/a.txt 设置/test/a.txt文件不可修改
lsattr:lsattr [选项] [文件名](注:用于显示文件或目录的隐藏属性)
eg:#lsattr -a 显示root目录下所有文件的隐藏属性
mkdir:mkdir [选项|参数] 目录名 eg:#mkdir -p test/aa/ {bb,cc}
在工作目录下的test目录中,建立一个名为aa的子目录。并在aa子目录中创建bb和cc目录,若父目录不戚碧存在,则创建
rmdir:rmdir [选项|参数] 目录名(注:用于删除空的目录)
rm:rm [选项] [文件或目录...](注:删除文件或目录)
mv:mv [选项] [源文件或目录] [目标文件或目录](注:移动或更名现有的文件或目录)
cp:cp [选项] [源文件或目录] [目标文件或目录] [目的目录]
eg:[root@Linux root]#cp ks/bb * /home/jake 复制/root/ks/bb开头的所有文件到/home/jake目录下
find:find 起始目录 查找条件 *** 作(从指定的起始目录开始,递归地查找其各个目录,查找满足查找条件的文件并对之采取相关的 *** 作) eg:[root@Linux root]#find . -empty 在/root/目录下,查找所有为空的文件或目录
whereis:whereis [选项] 查找的字符串 (查找指定文件的源、二进制中宴和手册等) eg:#whereis passwd 查找passwd命令的所有信息
which:which [选项] 查询的字符串(用于查询命令或别名的位置) eg:#which ls 查找ls命令的位置
locate:locate [选项] 查找的字符串(快速查找系统指定数据库中指定的内容)
eg:#locate -u 创建locate数据库 #locate groupadd 在locate数卖仔银据库中查找groupadd字符
l 文件压缩和有关文档归档的命令:
compress、uncompress:用于压缩或解压缩数据
gzip、gunzip:用于压缩或解压缩文件,其中gzip是在Linux系统中经常使用的压缩和解压缩命令
rpm:用于启动RPM软件包管理 *** 作
tar:用于启动文件打包程序
unzip/zip:用于解压缩扩展名为.zip的文件,即可以在Linux下解压Windows中用Winzip压缩的文件 / 用于打包和压缩文件
uuencode/uudecode:用于对一个二进制文件进行编码 / 用于对一个已编码的文件进行解码
l 针对文件系统的命令:
dd、df、edquota、fdformat、fdisk、mkfs、mkswap、mount、quota、quotaon、swapoff、swapon、umount
l 与DOS兼容的命令:
mcopy、mdel、mdir、mformat、mlabel、mtools
l 与系统管理相关的命令:
dmesg:用于显示或控制kernel缓冲区
mesg:用于设置是否允许其他用户用write命令发送信息(允许:#mesg y 不允许:#mesg n)
free:查看当前系统内存的使用情况
shutdown:关机或进入单人维护模式
uname:显示系统信息
sync:用于关闭Linux系统时,强制把内存中的数据写回硬盘,以免数据丢失
uptime:显示系统运行多长时间
date:显示当前系统的日期和时间
bc:设置计算机的语言类型
cal:显示计算机中的月历或年历
write:用来向系统中的某一个用户发送消息。用户如果想退出信息发送状态,按组合键Ctrl+C即可。示例:
#write root
发送内容
EOF
l 用户管理命令:
chfn、chsh、groupadd、groupmod、groups、passwd、usermod、whoami
useradd:创建新的用户帐户。
示例:#useradd –u 550 –g 100 –d /home/hong –s /bin/bash –e 08/01/03 –p yokotit hong
参数意义:
-u:设置用户标示符 -g:指定用户所属的用户组
-d:建立用户目录 -s:指定用户环境
-e:设置帐户的期限 -p:设置用户密码
(注意:当使用useradd来创建新的用户帐号时,管理员必须替用户设置密码)
userdel:删除帐号。示例:userdel –r hong (-r表示在删除帐户时,同时将该帐号的用户目录及邮件目录都删除)
(停用帐号:修改/etc/passwd文件,把相应行注释掉即可)
w:查看用户的行为。示例:
1.#w
2.#w root (查看root帐户的行为)
who:查看系统当前的在线用户。示例:
who [-u] (-u:列出详细信息)
last:查看最近有哪些用户曾经登陆过系统。(当执行命令时,将读取目录/var/log下的
wtmp文件)示例:
1.#last
2.#last hong (查看hong的登陆信息)
su:切换用户身份 su [-p] [-c command] [-s shell] [-] [USER [ARG]]
示例:[root@Linux test]#su -c "cp -r /root/*.*/tmp" root 切换到root用户环境,并执行复制命令返回
sudo:以系统管理者的身份执行指令 sudo [选项|参数] 命令
示例:切换身份,使系统10min后关机
[test@linux test]$ shutdown -h +10
-bash:shutdown:command not found
[test@linux test]$ sudo /sbin/shutdown -h +10
l 网络管理命令:
finger、ftp、host、hostname、
ifconfig:可查看网卡状态,修改一些网络配置。示例:
#ifconfig 查看网卡状态
#ifconfig eth0 netmask 255.255.0.0 修改子网掩码
#ifconfig eth0 down 关闭网卡
#ifconfig eth0 up 打开网卡
route:查看和配置路由信息
lynx、mail、netstat、nslookup、ping、pine、rlogin、rcp、rch、rsh、tcpdump、talk、telnet、wall、wget
l 进程管理命令:
(关于进程的优先级:优先级的范围为-20到19,其中-20优先级最高,默认优先级为0,加上nice之后,优先级变成10。-1到-20的优先级只有管理员才能设置。修改优先级可以使用renice命令。示例:#renice -5 2871 将优先级为2871的进程优先级改为-5)
、bg、fg、jobs、at、atq、atrm、crontab
kill:删除进程的命令。示例:
#kill -15 2682
#kill -9 2682
ps:查看系统中执行的进程,查看详细信息(ps –u 或ps -l)。示例:
1.#ps –l
2.查看系统每位用户的全部进程
#ps -aux
3.使用sort排序
#ps –aux –sort user
4.查询包含字符串hong的进程
#ps –aux | grep “hong”
top:用于监控系统的资源,包括内存、交换分区、CUP的使用率等
(注意:执行top命令时,将监视系统中全部用户的进程,如果只想监控某位特定的用户,只需按下U键,然后指定用户帐号名即可;终止执行中的程序:K)
l Shell命令(请记住:shell命令都属于bash命令):
SHELL:查看系统环境变量SHELL,示例:#echo $SHELL
alias:设置bash别名
unalias:用于删除已经设定的别名
history:在BASH shell里,history命令保留了用户最近执行的命令。示例:#history
set:在bash下,可用set命令查看环境变量。示例:#set
l 与打印有关的命令
lpq:用于为打印作业列出打印队列
lpr:用于将一个文件发送到网络打印机,并把文件列表作为命令参数。
示例:#lpr mydata1
lprm:用于从打印输出序列中删除打印作业
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)