关于在C++中调用system函数

来源:互联网 发布:ug8.0编程教程 编辑:程序博客网 时间:2024/06/02 08:12

关于在C++中调用system函数 - heirenheiren的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/heirenheiren/article/details/7367187


先看看下面的这一段程序:

#include <iostream>

#include <cstdlib>

int main(int argc, char* argv[])

{

 std::cout << "Hello world!" << std::endl;

 std::system("pause");     //让程序暂停

  return 0;

}

然后呢,再来讲几段背景知识。

背景知识1:字符界面

话说十几二十年前,一个个青春焕发、英俊潇洒、斗志昂扬的coder坐在学校机房里286电脑面前时,那电脑屏幕就是一个黑黑框,那时使用的操作系统叫DOS,后来,有个同学有钱,买了台386,上面运行的操作系统是Windows 3.1;人家说,那就是传说中的“图形用户界面”操作系统,简称“GUI”操作系统。

如此,操作系统就有“字符用户界面”和“图形用户界面”之分。

背景知识2:控制台

在图形用户界面的操作系统里,往往都带了一个模拟的“字符界面”小系统,用来让低级用户直接输入控制命令,以实现和系统交互,这就叫做“控制台”。因此,严格地说,“控制台”并不是DOS操作系统,因为它只是在图形用户界面的操作系统模拟出来的、内嵌的一个“字符界面”小系统,并不能单独存在。

通过点击“开始”按钮,找到开始菜单里的“运行(R)……”菜单项,点击,输入cmd,按回车键,或点击“确定”按钮,就可以看到一个黑黑的窗口了。如此,便打开了那听起来挺玄乎的控制台。

背景知识3:低级与高级

或许你会问:“低级用户直接在控制台里输入控制命令,以实现和系统交互,那么,高级用户呢?

嗯!这个问题问得好。这里的“低级”仅仅是说有些用户对操作系统有更深的了解,从而可以使用到一些相对“底层”些的功能,事实上所有用户都是平等的。“高级”用户就是用键盘等设备,特别是鼠标来和图形界面的操作系统进行交互。比如,每个人都会通过鼠标拖动,来实现移动某个文件从一个文件到另一个文件夹,是吧?有不会的?先去把Windows基本操作学好了再来学编程吧。

在计算机的术语里,“低级”往往表示接近底层逻辑,比如硬件。因此,“低级”往往表示一种“困难”。比如,我们学的C++称为“高级语言”(Java或C#更高级些),C则可以称为是“中级语言”,而汇编语言称为“低级语言”,但大家要知道,汇编语言很难的噢。

 

下面开始转入正题了:system 函数

要调用该函数,必须在前面包含:#include <cstdlib>

重复一下:c表示这个函数在C语言里也是通用的,std表示标准(当然是C的标准噢),lib表示“库”。即C语言里的标准库。那么system就是一个C语言标准库里的标准函数了。

system函数可以执行你发出的控制台命令。当然,得用英文的双引号将命令括起来,以表示一句话。不过,你也可以直接在控制台输入这个命令,当然,那时就不用引号了。前面我们已经学会如何通过“运行”命令来搞出一个控制台窗口,现在你只需在那个窗口里输入pause试试。

最后我说一句,和控制台相关的函数或代码,一般无法在“图形用户界面”里使用。

例题:编一程序,实现几个简单的DOS功能,包括:mtype、mcopy、mcomp等。

mtype 实现DOS的type功能,显示.TXT文件的内容

mcopy 实现DOS的copy功能,复制一个任意格式的磁盘文件。

mcomp 实现DOS的comp功能,比较二个任意格式的磁盘文件,从长度、内容二个方面。

注意用带参数的main函数。

思路:通过main函数的参数构造命令字符串,然后用system函数调用执行。

int main(int argc,char **argv){ …… } 

――――――――――――――――――――――――――――

作业:

1、将system("pause")中的“pause”一词,改为“Pause”,试试控制台命令是否区分大小写?

2、在system("pause")之前,插入一行:std::system("dir");   编译,执行,看看是什么结果?

――――――――――――――――――――――――――――

读者提问:我在主程序段中输入以下代码

system("d:\dir");

system("dir d:");

system("ping xxx.xxx.xxx.xxx");

system("copy d:\1.txt e:\2.txt");

输出都没有反应呢,程序运行也没有报错。该包含的文件都包含了,书写的格式都没有错,应该有反映的吧?谢谢回复!!

问题补充:那么怎样才能看到效果呢?比如想看到D盘下文件的列表,像在MS-DOS下运行命令一样。另外,最后的那个copy也没有执行,盘内确实是有这么一个文件的。

 

回复:编译程序不会检查你的输入参数字符串,所以就算你的参数(字符串)写错了,它也肯定不会报错。你的这几个调用都是独立的,实际上操作是执行了,只是你看不到。 唯一能看到效果的应该是最后一个吧,如果文件存在的话,应该可以拷贝成功的。如果想感性地看到其他几条指令的效果,不妨在最后加上一句:system("pause")

回答:我不是很理解你的意思,所以我按我的理解去说吧。

你要明白,system()函数针对的是DOS界面的操作,即调用DOS命令库中的命令来完成相关操作,所以一般只能处理一些信息并在DOS界面上显示,而很少用于提取信息。

如果你想在DOS下查看某个文件夹的内容,可用dir命令;具体到system()函数可这么写:

……

system("dir [路径名]");

……

其中路径名为可选项,即如果是当前目录的话就可以忽略。但要注意,写路径时,'\'要用'\\'来表示,因为这是C语言的转义字符。如要指明C:\abc,则应这样写:

system("dir C:\\abc");






/////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////


C++system函数 | 老狼博客
http://laolang.xtmm.cn/?p=13545


C++system函数

system函数 是可以调用一些DOS命令,比如 
system("cls");//清屏,等于在DOS上使用cls命令 
下面列出常用的DOS命令,都可以用system函数调用:

ASSOC 显示或修改文件扩展名关联。 
AT 计划在计算机上运行的命令和程序。 
ATTRIB 显示或更改文件属性。 
BREAK 设置或清除扩展式 CTRL+C 检查。 
CACLS 显示或修改文件的访问控制列表(ACLs)。 
CALL 从另一个批处理程序调用这一个。 
CD 显示当前目录的名称或将其更改。 
CHCP 显示或设置活动代码页数。 
CHDIR 显示当前目录的名称或将其更改。 
CHKDSK 检查磁盘并显示状态报告。 
CHKNTFS 显示或修改启动时间磁盘检查。 
CLS 清除屏幕。 
CMD 打开另一个 Windows 命令解释程序窗口。 
COLOR 设置默认控制台前景和背景颜色。 
COMP 比较两个或两套文件的内容。 
COMPACT 显示或更改 NTFS 分区上文件的压缩。 
CONVERT 将 FAT 卷转换成 NTFS。您不能转换 
当前驱动器。 
COPY 将至少一个文件复制到另一个位置。 
DATE 显示或设置日期。 
DEL 删除至少一个文件。 
DIR 显示一个目录中的文件和子目录。 
DISKCOMP 比较两个软盘的内容。 
DISKCOPY 将一个软盘的内容复制到另一个软盘。 
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。 
ECHO 显示消息,或将命令回显打开或关上。 
ENDLOCAL 结束批文件中环境更改的本地化。 
ERASE 删除至少一个文件。 
EXIT 退出 CMD.EXE 程序(命令解释程序)。 
FC 比较两个或两套文件,并显示 
不同处。 
FIND 在文件中搜索文字字符串。 
FINDSTR 在文件中搜索字符串。 
FOR 为一套文件中的每个文件运行一个指定的命令 
FORMAT 格式化磁盘,以便跟 Windows 使用。 
FTYPE 显示或修改用于文件扩展名关联的文件类型。 
GOTO 将 Windows 命令解释程序指向批处理程序 
中某个标明的行。 
GRAFTABL 启用 Windows 来以图像模式显示 
扩展字符集。 
HELP 提供 Windows 命令的帮助信息。 
IF 执行批处理程序中的条件性处理。 
LABEL 创建、更改或删除磁盘的卷标。 
MD 创建目录。 
MKDIR 创建目录。 
MODE 配置系统设备。 
MORE 一次显示一个结果屏幕。 
MOVE 将文件从一个目录移到另一个目录。 
PATH 显示或设置可执行文件的搜索路径。 
PAUSE 暂停批文件的处理并显示消息。 
POPD 还原 PUSHD 保存的当前目录的上一个值。 
PRINT 打印文本文件。 
PROMPT 更改 Windows 命令提示符。 
PUSHD 保存当前目录,然后对其进行更改。 
RD 删除目录。 
RECOVER 从有问题的磁盘恢复可读信息。 
REM 记录批文件或 CONFIG.SYS 中的注释。 
REN 重命名文件。 
RENAME 重命名文件。 
REPLACE 替换文件。 
RMDIR 删除目录。 
SET 显示、设置或删除 Windows 环境变量。 
SETLOCAL 开始批文件中环境更改的本地化。 
SHIFT 更换批文件中可替换参数的位置。 
SORT 对输入进行分类。 
START 启动另一个窗口来运行指定的程序或命令。 
SUBST 将路径跟一个驱动器号关联。 
TIME 显示或设置系统时间。 
TITLE 设置 CMD.EXE 会话的窗口标题。 
TREE 以图形模式显示驱动器或路径的目录结构。 
TYPE 显示文本文件的内容。 
VER 显示 Windows 版本。 
VERIFY 告诉 Windows 是否验证文件是否已正确 
写入磁盘。 
VOL 显示磁盘卷标和序列号。 
XCOPY 复制文件和目录树。


0 0
原创粉丝点击