Cç¨åºè°ç¨shellèæ¬å ±æ两ç§æ¹æ³ ï¼system()ãpopen()ï¼åå«å¦ä¸ï¼
system()
ä¸ç¨èªå·±å»å建è¿ç¨ï¼ç³»ç»å·²ç»å°è£ äºè¿ä¸æ¥ï¼ç´æ¥å å ¥èªå·±çå½ä»¤å³å¯
popen() ä¹å¯ä»¥å®ç°æ§è¡çå½ä»¤ï¼æ¯system
å¼éå°
以ä¸åå«è¯´æï¼
1ï¼system(shellå½ä»¤æshellèæ¬è·¯å¾)
system()
ä¼è°ç¨fork()产ç ååç¨ï¼ç±ååç¨æ¥è°ç¨/bin/sh-c stringæ¥å±¥è¡ åæ°stringå符串æ代表çå½ä»¤ï¼æ¤å½ä»¤å±¥è¡
å®è 祥åéå³è¿ååè°ç¨çåç¨ãå¨è°ç¨system()æé´SIGCHLD ä¿¡å·ä¼è¢«ææ¶æç½®ï¼SIGINTåSIGQUIT ä¿¡å·åä¼è¢«æ¼ è§ ã
è¿
åå¼ï¼å¦æsystem()å¨è°ç¨/bin/shæ¶å¤±è´¥åè¿å127ï¼å ¶ä»å¤±è´¥åå è¿å-1ãè¥åæ°string为空æé(NULL)ï¼åè¿åéé¶å¼ã å¦æ
system()è°ç¨æå åæ碰ååä¼è¿åå±¥è¡ shellå½ä»¤åçè¿åå¼ï¼ä½æ¯æ¤è¿åå¼ä¹æå¯è½ä¸ºsystem()è°ç¨/bin/sh失败æè¿åç127ï¼å
æ¤æ好è½ååç errno æ¥ç¡®è®¤å±¥è¡ æå ã
systemå½ä»¤ä»¥å ¶ç®ç¥
é«æçä½ç¨å¾å°å¾å¾å¹¿æ³ çå©ç¨ ï¼ä¸é¢æ¯ä¸ä¸ªä¾å
ä¾ï¼å¨/tmp/testDir/ç¬å±å®ç®å½ä¸æshellèæ¬tsh.shï¼å 容为
#!/bin/sh
wget $1
echo "Done!"
2ï¼popen(char
*command,char *type)
popen()
ä¼è°ç¨fork()产ç ååç¨ï¼ç¶åä»ååç¨ä¸è°ç¨/bin/sh -cæ¥å±¥è¡ åæ°commandçæ令ãåæ°typeå¯åºç¨
ârâ代表读åï¼âwâ代表åå ¥ãéµå¾ªæ¤typeå¼ï¼popen()ä¼å»ºç« 管éè¿å°ååç¨çæ å è¾åºè®¾å¤ ææ å è¾å ¥è®¾å¤
ï¼ç¶åè¿åä¸ä¸ªæ件æéãéååç¨ä¾¿å¯å©ç¨ æ¤æ件æéæ¥è¯»åååç¨çè¾åºè®¾å¤ ææ¯åå ¥å°ååç¨çæ å è¾å ¥è®¾å¤ ä¸ãæ¤å¤ï¼ææåºç¨ æ
件æé(FILE*)æä½çå½æ°ä¹é½å¯ä»¥åºç¨ ï¼é¤äºfclose()以å¤ã
è¿åå¼ï¼è¥æå
åè¿åæ件æéï¼å¦åè¿åNULLï¼å·®é åå åäºerrnoä¸ã注æï¼å¨ç¼åå ·SUID/SGIDæéçç¨åºæ¶è¯·å°½éé¿å åºç¨
popen()ï¼popen()ä¼ç»§æ¿ç¯å¢åéï¼éè¿ç¯å¢åéå¯è½ä¼é æç³»ç»å®å ¨çé®é¢ã
ä¾ï¼Cç¨åºpopentest.cå 容å¦ä¸ï¼
#include<stdio.h>
main
{
FILE * fp
charbuffer[80]
fp=popen(â~/myprogram/test.shâ,ârâ)
fgets(buffer,sizeof(buffer),fp)
printf(â%sâ,buffer)
pclose(fp)
}
ㄑm.wangchao.net.cn
推荐
cmd窗口是什么,怎么打开
举报/纠错
分类: 电脑/网络 >> *** 作系统/系统故障
参考答案:
cmd是command的缩写.命令行
在9x系统下输入command就可以打开命令行.而在NT系统上可以输入cmd来打开.
在命令行里你可以看到你的系统版本,文件系统版本等等
你可以敲入help查看帮助
Cmd启动命令解释器 Cmd.exe 的新实例。如果在不含参数的情况下使用,则 cmd 显示 Windows XP 的版本和版权信息。
语法
cmd [[{/c|/k}] [/s] [/q] [/d] [{/a|/u}] [/t:fg] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] string]
参数
/c
执行 string 指定的命令,然后停止。
/k
执行 string 指定的命令并继续。
/s
修改位于 /c 或 /k 之后的 string 处理。
/q
关闭回显。
/d
禁用自动运行命令执行。
/a
创建美国国家标准协会 (ANSI) 输出。
/u
创建 Unicode 输出。
/t:fg
设置前景 f 和背景 g 的颜色。下表列出了可用作 f 和 g 的值的有效十六进制数字。 值 颜色
0 黑色
1 蓝色
2 绿
3 湖蓝色
4 红
5 紫色
6 黄
7 白色
8 灰色
9 浅蓝色
A 浅绿色
B 浅水绿
C 浅红色
D 浅紫色
E 浅黄色
F 亮白色
/e:on
启用命令扩败衡展。
/e:off
禁用命令扩展。
/f:on
启用文件和目录名完成。
/f:off
禁用文件和目录名完成。
/v:on
启用延迟的环境变量扩展。
/v:off
禁用延迟的环境变量扩展。
string
指定要执行的命令。
/?
在命令提示符显示帮助。
注释
使用多个命令
可以在 string 中使用由 &&分隔察碧做的多个命令,不过这些命令必须置于引号之中(例如,"command&&command&&command")。
处理引号
如果指定了 /c 或 /k,则在满足下述所有条件的情况下,cmd 会处理 string 中的其余命令而将引号保留:
未使用 /s。
正确使用一对引号。
在引号内未使用任何特殊字符(例如: &<>( ) @ ^ |}。
在引号内使用了一个或多个空格子符。
引号内的 string 为可执行文件的名称。
如果上述条件不能满足,则处理 string 时将首先检查它的第一个字符以验证其是否为左引号。如果第一个字符是左引号,则它会与右引号分离开。跟在右引号之后的任何文本都会得到保留。
执行注册表子项
如果在 string 中未指定 /d,Cmd.exe 会查找下述注册表子慧旁项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun\REG_SZ
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun REG_EXPAND_SZ
如果上述的一个注册表子项或两个都存在,则会在执行其他变量之前执行它们。
警告
编辑注册表不当可能会严重损坏您的系统。在更改注册表之前,应备份计算机上任何有价值的数据。
启用和禁用命令扩展
在 Windows XP 中,命令扩展在默认情况下是启用的。对于特定过程可以使用 /e:off 将它们禁用。通过设置下述 REG_DWORD 值,可以在计算机上或用户会话中启用或禁用所有 cmd 命令行选项的扩展:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions\REG_DWORD
在注册表中使用 Regedit.exe 可以将 REG_DWORD 值设为 0×1(即启用)或 0×0(即禁用)。用户特定设置优先于计算机设置,并且命令行选项优先于注册表设置。
警告
编辑注册表不当可能会严重损坏您的系统。在更改注册表之前,应备份计算机上任何有价值的数据。
启用命令扩展后,会影响到下述命令:
assoc
call
chdir (cd)
color
del (erase)
endlocal
for
ftype
goto
if
mkdir (md)
popd
prompt
pushd
set
setlocal
shift
start(还包括将更改外部命令过程)
有关这些命令的详细信息,请参阅“相关主题”。
启用延迟的环境变量扩展
启用延迟的环境变量扩展,可以使用感叹号字符来替代运行时的环境变量值。
启用文件和目录名完成
默认情况下,禁用文件和目录名完成。对于特定的 cmd 命令处理,可以通过 /f:{on|off} 来启用或禁用该功能。通过设置下述 REG_DWORD 值,可以在计算机上或用户会话中启用或禁用所有 cmd 命令处理的文件和目录名完成:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar\REG_DWORD
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar\REG_DWORD
要设置 REG_DWORD 值,请运行 Regedit.exe 并使用特定功能的控制字符的十六进制值(例如,用 0×9 表示 TAB 键,用 0×08 表示 BACKSPACE 键)。用户特定设置优先于计算机设置,并且命令行选项优先于注册表设置。
警告
编辑注册表不当可能会严重损坏您的系统。在更改注册表之前,应备份计算机上任何有价值的数据。
如果使用 /f:on 启用了文件和目录名完成,则对于目录名完成,可使用 CTRL+D 组合键;而对于文件名完成,可使用 CTRL+F 组合键。要禁用注册表中特定字符的完成,请使用空格值 [0×20],因为空格不是有效的控制字符。
按 CTRL+D 或 CTRL+F 组合键时,cmd 会处理文件和目录名的完成 *** 作。这些组合键的作用是在 string 后附加通配符(如果还未使用),并创建匹配的路径列表,然后显示第一个匹配的路径。如果所有路径都不匹配,文件和目录名完成 *** 作会发出警告声,并且不更改所显示的内容。要逐个查看匹配路径列表中的路径,请重复按 CTRL+D 或 CTRL+F 组合键。要向后查看该列表,请在按 SHIFT 的同时按 CTRL+D 或 CTRL+F 组合键。要放弃已保存的匹配路径列表并生成新列表,可以编辑 string,然后按 CTRL+D 或 CTRL+F 组合键。如果在 CTRL+D 和 CTRL+F 组合键之间切换,将会放弃已保存的匹配路径列表并生成新列表。CTRL+D 组合键与 CTRL+F 组合键之间唯一的不同在于,CTRL+D 仅匹配目录名,而 CTRL+F 既匹配文件名,又匹配目录名。如果在任何内部目录命令(CD、MD 或 RD)中使用文件和目录名的完成,将仅使用目录的完成。
如果将匹配路径置于引号之中,则文件和目录名完成会正确地处理含有空格或特殊字符的文件名。
下述特殊字符需要有引号:&<>[ ] { } ^ = ! ' + , ` ~ [white space]
如果您提供的信息包含空格,请将文本置于引号之中(例如,"Computer Name")。
如果从 string 中处理文件和目录名完成 *** 作,则位于光标右侧的 [Path] 的任意部分都将放弃(即在 string 中处理完成 *** 作的位置)。
格式化图例
格式 含义
斜体 用户必须提供的信息
粗体 用户必须像显示的一样准确键入的元素
省略号 (...) 可在命令行中重复多次的参数
在括号 ([]) 之间 可选项目
在大括号 ({}) 之间;将选项用竖线 (|) 隔开。例如:{even|odd} 用户必须从中只选择一个选项的选项组
Courier 字体 代码或程序输出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)