关于在C++中调用system函数
先看看下面的这一段程序:
#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函数的更多相关文章
- 关于在C#中构造函数中调用虚函数的问题
在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...
- 在C#中调用Win32函数EnumWindows枚举所有窗口。
原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一. ...
- EC笔记,第二部分:9.不在构造、析构函数中调用虚函数
9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...
- 如何在C语言中调用Swift函数
在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
- C++ 构造函数中调用虚函数
我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { p ...
- Smarty模板中调用PHP函数
因为应用需要,要在Smarty中调用PHP函数,实现办法如下:模板 数据条数:{$data|count} 活动页面文件后缀:{$page|substr:'-3'} 特殊情况:{$page|str_re ...
- C++箴言:避免构造或析构函数中调用虚函数
如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉.但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼. 正 ...
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
关于构造函数的一个违反直觉的行为 我会以重复标题开始:你不应该在构造或者析构的过程中调用虚函数,因为这些调用的结果会和你想的不一样.如果你同时是一个java或者c#程序员,那么请着重注意这个条款,因为 ...
随机推荐
- java之字符
参考http://how2j.cn/k/number-string/number-string-character/323.html 保存一个字符的时候使用char package character ...
- 17. PHP+Mysql注入防护与绕过
黑名单关键字过滤与绕过 过滤关键字and.or PHP匹配函数代码如下: preg_match('/(and|or)/i', $id) 如何Bypass,过滤注入测试语句: 1 or 1 = 1 ...
- 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务
在CentOS7环境下,kubernetes单机版环境,成功部署一个服务,在虚拟机中访问服务没问题,下面这样: curl http://172.27.73.26:8888/eureka-server/ ...
- HTML中的ID不能以数字开头
最近在学习网页制作,发现ID在w3c规范里是不能以一个数字开头的,chrome浏览器是可以,firefox就不能使用数字开头了,其它浏览器未测试. 记录一下! W3C规范链接:http://www.w ...
- jquery插件-自由拖拽
最近工作不是很忙,学习之余想整理一些代码出来,首先想到的就是是js拖拽. 两年前去某公司面试的时候,曾经被问过这个问题,如何在页面上拖放元素,尽管现在看起来很简单,但当时的我半点思路都没有,面试想当然 ...
- ListBox点击改变相应的值
private void lbCity_SelectedIndexChanged(object sender, EventArgs e) { 写逻辑 }
- 一个web.Config或app.Config自定义段configSections的示例--转
直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml配置文件,简洁方便得多.这两个配置文件不仅有常见的connectionStrings和appSetti ...
- [Win10] 安装虚拟光驱 用于加载ISO等镜像文件
百度上找到UltraISO安装 一般来说安装到这就基本会显示一个 若经过上述步骤仍没出现虚拟光驱,则尝试进行加载ISO镜像文件到虚拟光驱然后再看看 这样基本就大功告成了~
- bbc--平台点击进入详情页配置
路径: 配置方式: $finderview = 'detail_base'; $arr = array( 'app'=>$_GET['app'], 'ctl'=>$_GET['ctl'], ...
- ABC118D(DP,完全背包,贪心)
#include<bits/stdc++.h>using namespace std;int cnt[10]={0,2,5,5,4,5,6,3,7,6};int dp[10007];int ...