如何在C语言中调用cmd命令?

如何在C语言中调用cmd命令?,第1张

在C语言中调�”.shell命令的方法实现。

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 字体 代码或程序输出


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12340566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存