首页 - 技术 -  基础知识篇——system函数

基础知识篇——system函数

2023-09-24 04:41

system是一个C语言和C++下的函数。windows操作系统下system () 函数详解主要是在C语言中的应用,system函数需加头文件后方可调用。

Windows函数

函数名: system
功 能: 发出一个DOS命令
用 法: int system(char *command);

#include 
#include 
int main(void)
{printf("About to spawn and run a DOS command\n");system("dir");return 0;
}

又如:system(“pause”)可以实现冻结屏幕,便于观察程序的执行结果;

system(“CLS”)可以实现清屏操作。
而调用color函数可以改变控制台的前景色和背景,具体参数在下面说明。

  • 例如,用 system(“color 0A”); 其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
    0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色
#include "pch.h"
//#include
#include
#include
//#include
int print()
{std::cout<<" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n";std::cout<<" =======C++语言关机程序 ======\n";std::cout<<"║※1.实现1定时关闭计算机     ║\n";std::cout<<"║※2.立即关闭计算机         ║\n";std::cout<<"║※3.注销计算机             ║\n";std::cout<<"║※0.退出系统               ║\n";std::cout<<" =============================\n";return 0;
}
int main()
{system("title C++ shutdown program");        //设置cmd窗口标题system("mode con cols=48 lines=25");//窗口宽度高度system("color 0B");system("date /T");system("TIME /T");char cmd[20] = "shutdown -s -t ";char t[5] = "0";print();int c;std::cin >> c;switch (c){case 1:printf("您想在多少秒后自动关闭计算机?(0~600)\n"); std::cin >> t;system(strcat(cmd, t)); break;case 2:system("shutdown -p"); break;case 3:system("shutdown -l"); break;case 0:break;default:std::cout << "Error!" << std::endl;}system("pause");exit(0);return 0;
}

system(“pause”)
	 system("pause");
这个函数要加在return语句之前。
  • system()就是调用(DOS)系统命令(和shell命令)。

  • pause ,即DOS命令集合中的暂停命令;
    在一个程序中写有 system(“pause”)语句时,就是说从该程序里调用了“pause”命令,即让操作系统来暂停该程序进程的执行,同时程序运行到此语句处时,会在程序的窗口上显示“Press any key to continue . . .” 也就是 “按任意键继续…”,即等待用户按下任意一个按键使该程序从暂停状态返回到执行状态继续从刚才暂停的地方开始执行。


    void system(char *cmd);

    • 参数cmd,DOS命令,如Pause, cls
    • 返回值:无。
    • 在VC 6.0下,要添加如下的头文件!
      #include

Linux/Unix函数

  • 执行shell 命令
  • 相关函数
    fork,execve,waitpid,popen
  • 表头文件
    #include
  • 定义函数
    int system(const char * string);
  • 函数说明
    system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
  • 返回值
    如果fork()失败 . 返回-1:出现错误
    如果exec()失败,表示不能执行Shell,返回值相当于Shell执行了exit(127)
    如果执行成功,则返回子Shell的终止状态
    如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),仅当命令处理程序可用时,返回非零值,可以通过这一特征判断在一个给定的操作系统上是否支持system函数(当system函数返回值为0时,表明system函数无效,在UNIX系统中,system函数总是可用的);。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
    附加说明
    在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
#include
main()
{
system(“ls -al /etc/passwd /etc/shadow”);
}
执行结果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado

与exec的区别
1、system()和exec()都可以执行进程外的命令,system是在原进程上开辟了一个新的进程,但是exec是用新进程(命令)覆盖了原有的进程
2、system()和exec()都有能产生返回值,system的返回值并不影响原有进程,但是exec的返回值影响了原进程