xml地图|网站地图|网站标签 [设为首页] [加入收藏]
输出设备基本操作,常用命令
分类:操作系统

DirectSound是DirectX组件之一,提供了对音频设备的捕获和播放能力,同时它也是唯一几个支持Xp系统的音频技术之一。 DirectSound主要有以下特点:

常用命令集合

微软和思科环境:

优点:

文件查找 find、locate

在思科认证的学习中,我们需要用到许多类的模拟器,但这些模拟器并不能够更真实的模拟我们的用户机在应用中所出现的现象。因此,我们借由微软的环境来更真实地体现我们所搭建的网络中的一些应用。

  • 播放音频低延迟
  • 硬件资源控制
  • 同时播放多个声音。
  • 控制硬件缓冲区的使用优先级(DirectSound使用缓冲区来播放音频)。
  • 模拟3D音频环境。
  • 动态更改音效(回声、和声等)。
  • 捕获音频输入设备声音位wav(多为PCM数据,未经压缩)。

find

find: 文件查找,针对文件名,精确查找,磁盘搜索,io读写,cpu开销大

find [options] [path...] [expression] [action]

b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[cwbkMG] : 文件大小 为 n 个由后缀决定的数据块。其中后缀为:
b: 代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)
c: 表示字节数
k: 表示 kilo bytes (1024字节)
w: 字 (2字节)
M:兆字节(1048576字节)
G: 千兆字节 (1073741824字节)
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

===expression===

微软环境:windows server 2003,在虚拟机(VMware)中我们安装windows server 2003可以在网络中体现真实的服务器和主机的一些应用。

缺点:

按文件名:

[root@localhost ~]# find /etc -name "ifcfg-eth0"
[root@localhost ~]# find /etc -iname "ifcfg-eth0"            //-i忽略大小写
[root@localhost ~]# find /etc -iname "ifcfg-eth*"

思科环境:模拟器GNS3,安装在真机中。

  • 只能播放wav音频文件。

按文件大小:

[root@localhost ~]# find /etc -size +5M                        //大于5M
[root@localhost ~]# find /etc -size 5M
[root@localhost ~]# find /etc -size -5M
[root@localhost ~]# find /etc -size +5M -ls                    //-ls找到的处理动作

 

这里我们说说设备操作这一块儿。

指定查找的目录深度:

-maxdepth levels
-mindepth levels
[root@localhost ~]# find / -maxdepth 4 -a  -name "ifcfg-eth0"

目标:在GNS3中可以搭建模拟网络,连接虚拟机中的服务器,相当于网络中的真的服

1. 输出设备操作

在DirectSound中,一个设备对象就代表一个音频设备,播放设备对象对应播放设备,输入设备对象对应输入设备。因为DirectSound使用COM协议,因此每个设备对象都用接口来表示。这里IDirectSound8这个接口就代表了一个输出设备对象,应用程序可以对同一个音频设备创建多个设备对象来进行音频输出操作。旧版本的DirectSound使用的是IDirectSound接口,相比前者少了一些功能。

按时间找(atime,mtime,ctime):

[root@localhost ~]# find /etc -mtime +5                      //修改时间超过5天
[root@localhost ~]# find /etc -mtime 5                       //修改时间等于5天
[root@localhost ~]# find /etc -mtime -5                      //修改时间5天以内

务器的功能。

1.1 枚举

HRESULT WINAPI DirectSoundEnumerateW(In LPDSENUMCALLBACKW pDSEnumCallback, In_opt LPVOID pContext);
typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID);

我们通过DirectSoundEnumerateW这个函数来枚举,该函数需要传入一个回调函数(原型见上),当枚举到一个设备时该回调会被调用。如果我们想继续枚举,需要在这个回调用中返回TRUE来告诉系统,否则返回FALSE。另一个参数pContext允许用户传入额外的参数,传入回调函数的最后一个实参就是这个pContext。枚举时,DirectSound会将默认也认作一个单独的设备来对待,因此默认设备会被重复枚举一次。当设备被作为默认设备枚举时,它的GUID和设备描述字符串都为空,需要小心处理,这里我直接跳过了该次枚举:

if (DirectSoundEnumerateW(enumerateCallback, nullptr) != DS_OK) {
    ...
}

BOOL CALLBACK DirectSoundBasic::enumerateCallback(LPGUID guid,
                                              LPCWSTR deviceDescription,
                                              LPCWSTR deviceDriverModule,
                                              LPVOID context)
{
    Q_UNUSED(context);

    //  if primary device, skip it
    if (guid == nullptr)        return TRUE;

    ...
}

按文件属主、属组找:

[root@localhost ~]# find /home -user jack                    //属主是jack的文件
[root@localhost ~]# find /home -group hr                     //属组是hr组的文件
[root@localhost ~]# find /home -user jack -group hr
[root@localhost ~]# find /home -user jack -a -group hr
[root@localhost ~]# find /home -user jack -o -group hr

[root@localhost ~]# find /home -nouser
[root@localhost ~]# find /home -nogroup
[root@localhost ~]# find /home -nouser -o -nogroup 

实现步骤:如下图完整环境所示:

1.2 创建设备对象

HRESULT WINAPI DirectSoundCreate8(In_opt LPCGUID pcGuidDevice, Outptr LPDIRECTSOUND8 *ppDS8, Pre_null LPUNKNOWN pUnkOuter);

调用DirectSoundCreate8函数,我们可以创建一个设备对象,通过传入一个枚举设备时获得的GUID,函数会返给我们一个IDirectSound8接口代表设备对象:

IDirectSound8* directSound8;
if (DirectSoundCreate8(guid, &directSound8, NULL) != DS_OK) {
    std::wcout << L"[error] DirectSoundCreate8 call error!";
    return TRUE;    //  if error, skip this device
}

按文件类型:

[root@localhost ~]# find /dev -type f                           //f普通
[root@localhost ~]# find /dev -type d                           //d目录
[root@localhost ~]# find /dev -type l                           //l链接
[root@localhost ~]# find /dev -type b                           //b块设备
[root@localhost ~]# find /dev -type c                           //c字符设备
[root@localhost ~]# find /dev -type s                           //s套接字
[root@localhost ~]# find /dev -type p                           //p管道文件

图片 1

1.3 设置设备对象优先级

HRESULT IDirectSound8::SetCooperativeLevel(HWND hwnd, DWORD dwLevel)

在使用设备对象创建缓冲区(用来捕获、播放音频)之前,我们需要设置设备对象的协作级别。这个协作级别相当于用户对设备进行操作的优先级,分为:

  • DSSCL_EXCLUSIVE: 互斥级别。对于DirectX8.0以前版本,仅播放当前应用的音频数据,其他应用的声音不会被播放;对于DirectX8.0级以后版本,同DSSCL_PRIORITY版本。

  • DSSCL_NORMAL: 普通级别,这种级别下的应用程序具有最平滑的多任务和资源共享表现,但是这种应用不能更改主缓冲区音频数据格式,输出音频格式被限制为8位数据。在DirectSound中,次缓冲区用来填充应用程序需要播放的声音,主缓冲区会对多个次缓冲区(可能是本应用的,也可能是其他应用的)进行混音,然后用声卡输出播放。

  • DSSCL_PRIORITY: 优先级别,可以更改主缓冲区数据格式。
  • DSSCL_WRITEPRIMARY:写主缓冲区级别,应用可以直接写入主缓冲区,此时所有次缓冲区不会被播放(如果设备的驱动是DirectSound模拟出来的,则不能设置该级别)。

注意该函数需要传入一个窗口句柄,因为我们今天只介绍DirectSound的基本操作,我直接传入桌面窗口的句柄并设定位DSSCL_NORMAL优先级:

if (directSound8->SetCooperativeLevel(GetDesktopWindow(), DSSCL_NORMAL) != DS_OK) {
    std::wcout << L"[error] SetCooperativeLevel call error!";
    return TRUE;
}

按文件权限:

[root@localhost ~]# find . -perm 644 -ls 
[root@localhost ~]# find . -perm -644 -ls
[root@localhost ~]# find . -perm -600 -ls
[root@localhost ~]# find . -perm -222 -ls                            //全局可写
[root@localhost ~]# find /usr/bin /usr/sbin -perm -4000 -ls          //包含set uid
[root@localhost ~]# find /usr/bin /usr/sbin -perm -2000 -ls          //包含set gid
[root@localhost ~]# find /usr/bin /usr/sbin -perm -1000 -ls          //包含sticky

1)  在GNS3中拖两台3600型号的路由器R1和R2,以及一朵云。 

1.4 设备能力

HRESULT IDirectSound8::GetCaps(LPDSCAPS pDSCaps)

不同的音频播放设备具有不同的能力,DirectSound允许我们查询设备的能力:

  • 是否经过Microsoft认证。
  • 知否支持最小最大采样率之间的所有采样率。
  • 当没有DirectSound驱动时模拟驱动。
  • 主次缓冲区格式(16位、8位)。
  • 主次缓冲区声道支持(单声道、立体声即多声道)。
  • 不精准的数据(某些声卡不支持):
    • 缓冲区(静态缓冲区、流缓冲区、3D缓冲区)最大数、空闲数。
    • 声卡上的总内存数量、空闲内存数量、最大空闲块大小,

我们传给GetCaps一个DSCAPS结构体地址,然后系统就帮我们填充相应的数据,调用GetCaps前需要将DSCAPS结构体的dwSize设置为DSCAPS的大小:

DSCAPS deviceCapability = { sizeof(deviceCapability) };
if (directSound8->GetCaps(&deviceCapability) != DS_OK) {
    std::wcout << L"[error] GetCaps call error!";
    return TRUE;
}

按正则表达式:

-regex pattern
[root@localhost ~]# find /etc  -regex  '.*ifcfg-eth[0-9]'
.*       任意多个字符
[0-9]  任意一个数字

[root@localhost ~]# find /etc -regex '.*ifcfg-enp0s25'
/etc/sysconfig/network-scripts/ifcfg-enp0s25

[root@localhost ~]# find /etc -regex '.*ifcfg-enp0s[0-9]+'
/etc/sysconfig/network-scripts/ifcfg-enp0s25

==找到后处理的动作 ACTIONS: (默认动作-print)==

-print
-ls
-delete
-exec 后面跟自定义的shell命令
-ok 后面跟自定义的shell命令

[root@localhost ~]# find /etc -name "ifcfg*"
[root@localhost ~]# find /etc -name "ifcfg*" -print
[root@localhost ~]# find /etc -name "ifcfg*" -ls
[root@localhost ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp ;
[root@localhost ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp ;

[root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
[root@localhost ~]# find /etc -name "ifcfg*" -delete

扩展知识:find结合xargs
[root@localhost ~]# find . -name "yang*.txt" |xargs rm -rf         
[root@localhost ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp

2)  右击云点击配置——>C1,然后进行右面的选项配置。

1.5 播放器配置

HRESULT IDirectSound8::GetSpeakerConfig(LPDWORD pdwSpeakerConfig)
HRESULT IDirectSound8::SetSpeakerConfig(LPDWORD pdwSpeakerConfig)

播放器配置只能是以下之一:

  • DSSPEAKER_5POINT1_SURROUNDDSSPEAKER_5POINT1_BACK: 家庭影院配置,5个环绕扬声器,1个低音炮。
  • DSSPEAKER_DIRECTOUT:直接播放。
  • DSSPEAKER_HEADPHONE:头戴式耳机。
  • DSSPEAKER_MONO:单声道扬声器。
  • DSSPEAKER_QUAD:4声道播放器。
  • DSSPEAKER_STEREO:立体声播放器。
  • DSSPEAKER_SURROUND:环绕播放器。
  • DSSPEAKER_7POINT1_WIDEDSSPEAKER_7POINT1_SURROUND:家庭影院配置,7个环绕扬声器,1个低音炮。

虽然MSDN文档没有写清楚,但是通过查以上宏定义我们发现它们是按大小顺序定义的,因此不可能通过OR|来包含多种可能,例子中如果调用出错直接返回TRUE表示我们继续枚举设备并继续查询那些设备能力:

DWORD deviceSpeakerConfiguration;
if (directSound8->GetSpeakerConfig(&deviceSpeakerConfiguration) != DS_OK) {
    std::wcout << L"[error] GetSpeakerConfig call error!";
    return TRUE;
}

find练习

1. 将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
# find /etc -type d -exec mkdir /tmp/{} ;


2. 将/etc目录复制到/var/tmp/
    将/var/tmp/etc中的所有目录设置权限777(仅目录)
    将/var/tmp/etc中所有文件权限设置为666
# cp -rf /etc /var/tmp/ 
# chmod -R a=rwX /var/tmp/etc/
或者
find /var/tmp/etc/ -type d -exec chmod 777 {} ;         //分号是找到一个设置一个权限
find /var/tmp/etc/ -type d -exec chmod 777 {} +        //加号是统一找到后设置权限
find /var/tmp/etc/ ! -type d -exec chmod 777 {} + 

3. 以下命令的区别是什么?
[root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
[root@localhost ~]# find /etc -name "ifcfg*" -exec rm -rf {} +

[root@localhost ~]# mkdir dir1
[root@localhost ~]# touch dir1/file{1..20}

[root@localhost ~]# find /root/dir1 -name "file5"
[root@localhost ~]# find /root/dir1 ! -name "file5"

[root@localhost ~]# find /root/dir1 -name "file5" -o -name "file9" 
/root/dir1/file5
/root/dir1/file9

[root@localhost ~]# find /root/dir1 -name "file5" -o -name "file9" -ls
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[root@localhost ~]# find /root/dir1 -name "file5" -ls  -o -name "file9" -ls
1466499    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file5
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[root@localhost ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -ls
1466499    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file5
1466515    0 -rw-r--r--   1 root     root            0 6月  5 11:15 /root/dir1/file9

[root@localhost ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -exec rm -rvf {} ;
removed ‘/root/dir1/file5’
removed ‘/root/dir1/file9’

图片 2

2. 运行结果

这次我们用GUI界面来显示实例运行的结果(出于方便考虑,以后我会用控制台来显示示例),为防止用户误操作更改显示的数据我将大部分控件都disable了:

图片 3

完整代码见链接。

 locate

(查询的数据库: /var/lib/mlocate/mlocate.db)  

计划任务:每天自动更新数据库 /etc/cron.daily/mlocate.cron
手动更新数据库:updatedb

# locate ifcfg-eth0
# locate ifcfg-enp0s25

3)  在以太网NIO选项卡下的网络适配器下拉菜单中选择VMware网络适配器VMnet1。

文件过滤 grep

 grep工具:行过滤

OPTIONS:
    -i: 不区分大小写
    -v: 查找不包含指定内容的行,反向选择
    -w: 按单词搜索
    -c: 统计匹配到的次数
    -n: 显示行号
    -r: 逐层遍历目录查找
    -A: 显示匹配行及前面多少行
    -B: 显示匹配行及后面多少行
    -C: 显示匹配行前后多少行
    --color=auto :可以将找到的关键词部分加上颜色的显示
    -l:只列出匹配的文件名
    -L:列出不匹配的文件名
    -e: 使用正则搜索
    ^key:以什么开头
    key$:以什么结尾

每次过滤出来的内容显示颜色:

vim ~/.bashrc
alias grep='grep --color=auto'
source ~/.bashrc

 使用方法 >>参考

图片 4

文件打包压缩 

4)  点击添加按钮——>再点击出现在下面图框中的适配器——>再点击OK。

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:输出设备基本操作,常用命令

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文