system()

system()—执行shell命令也就是像dos发送一条指令。
相关函数:fork, execve, waitpid, popen头文件:#include <stdlib.h>定义函数:int system(const char * string);
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=亮白色

 

 

函数说明

system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT 和SIGQUIT 信号则会被忽略.

2返回值编辑


  1、如果 system()在调用/bin/sh 时失败则返回127, 其他失败原因返回-1.。
  2、若参数string 为空指针(NULL), 则返回非零值.
  3、如果system()调用成功则最后会返回执行shell 命令后的返回值, 但是此返回值也有可能为system()调用/bin/sh 失败所返回的127, 因此最好能再检查errno 来确认执行成功.
 

3附加说明编辑

:在编写具有 SUID/SGID 权限的程序时请勿使用system(), system()会继承环境变量, 通过环境变量可能会造成系统安全的问题.
例如:C
?
1
2
3
4
5
6
7
  #include <stdio.h>
  #include <stdlib.h>
  int  main( void )
  {
      system ( "ls -al /etc/passwd /etc/shadow" );
      return  0;
  }
运行结果
  -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
  -r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow
C++
1
2
3
4
5
6
7
8
9
10
  #include <iostream>
  #include <stdlib.h>
  using  namespace  std;
  int  main( void )
  {
      cout <<  "Hello world"  << endl;
      system  ( "pause" );
      system  ( "cls" );
      return  0;
  }
相关文章
相关标签/搜索