当前位置:  技术问答>linux和unix

system函数的疑问

    来源: 互联网  发布时间:2016-04-23

    本文导语:  /*  * system.c - Demonstrate the system() call  */ #include  #include  int main(void) { int retval; retval = system("ls -l"); if(retval == 127) { fprintf(stderr, "/bin/sh not availablen"); exit(127); } else if(retval == -1) { perror("system"); exit(EXIT_FA...


/*
 * system.c - Demonstrate the system() call
 */
#include 
#include 

int main(void)
{
int retval;

retval = system("ls -l");

if(retval == 127) {
fprintf(stderr, "/bin/sh not availablen");
exit(127);
} else if(retval == -1) {
perror("system");
exit(EXIT_FAILURE);
} else if(retval != 0) {                                  //这句为什么这么判断不理解。原型:int system(const char *string);
fprintf(stderr, "command returned %dn", retval); //当string为NULL的时候system才返回0,如果正常执行,那么retval !=0 
perror("ls");                                     //岂不是永远成立,这里的语句不是应该执行的么?  
} else {
puts("command successfully executed");
}
exit(EXIT_SUCCESS);
}



运行结果:
[root@localhost process]# ./system
总用量 18
-rwxrwxrwx  1 root root  180 2000-07-28  abort.c
-rwxrwxrwx  1 root root  756 2000-07-31  block.c
-rwxrwxrwx  1 root root  530 2000-07-28  child.c
-rwxrwxrwx  1 root root  319 2000-07-28  execve.c
-rwxrwxrwx  1 root root  859 2000-07-31  fkill.c
-rwxrwxrwx  1 root root 5367 11月  4 16:30 getname
-rwxrwxrwx  1 root root  829 11月  4 16:30 getname.c
-rwxrwxrwx  1 root root 5311 11月  4 15:55 ids
-rwxrwxrwx  1 root root  331 2000-07-28  ids.c
-rwxrwxrwx  1 root root  899 2000-07-28  killer.c
-rwxrwxrwx  1 root root  543 2000-07-31  Makefile
-rwxrwxrwx  1 root root  784 2000-07-31  mkset.c
-rwxrwxrwx  1 root root  813 2000-07-31  pending.c
-rwxrwxrwx  1 root root  217 2000-07-28  prpids.c
-rwxrwxrwx  1 root root  889 2000-07-28  resusg1.c
-rwxrwxrwx  1 root root 1423 2000-07-28  resusg2.c
-rwxrwxrwx  1 root root 5445 11月  5 13:08 system
-rwxrwxrwx  1 root root  470 2000-07-28  system.c
-rwxrwxrwx  1 root root  686 2000-07-28  waiter.c
command successfully executed

|
NAME

    system - issue a command

SYNOPSIS

    #include 

    int system(const char *command);

RETURN VALUE

    If command is a null pointer, system() shall return non-zero to indicate that a command processor is available, or zero if none is available. [CX]  The system() function shall always return non-zero when command is NULL. 

    [CX] If command is not a null pointer, system() shall return the termination status of the command language interpreter in the format specified by waitpid(). The termination status shall be as defined for the sh utility; otherwise, the termination status is unspecified. If some error prevents the command language interpreter from executing after the child process is created, the return value from system() shall be as if the command language interpreter had terminated using exit(127) or _exit(127). If a child process cannot be created, or if the termination status for the command language interpreter cannot be obtained, system() shall return -1 and set errno to indicate the error.


|
The system() function shall always return non-zero when command is NULL.

当 string 为 NULL 的时候,system 返回不是 0

|
当参数为空时,如果sh环境正常,则返回0,否则返回-1.system使用这一特性检查系统的shell环境是否正常.
当传入参数非空时返回值:
为0则shell执行成功.
最低一个字节回shell的返回值,其他为system接受到的信号值.

|
man system

SYSTEM(3)                                 Linux Programmer’s Manual                                SYSTEM(3)

NAME
       system - execute a shell command

SYNOPSIS
       #include 

       int system(const char *command);

DESCRIPTION
       system() executes a command specified in command by calling /bin/sh -c command, and returns after the
       command has been completed.  During execution of the command, SIGCHLD will be blocked, and SIGINT and
       SIGQUIT will be ignored.

RETURN VALUE
       The  value returned is -1 on error (e.g.  fork() failed), and the return status of the command other‐
       wise.  This latter return status is in the format specified in wait(2).  Thus, the exit code  of  the
       command  will be WEXITSTATUS(status).  In case /bin/sh could not be executed, the exit status will be
       that of a command that does exit(127).

       If the value of command is NULL, system() returns non-zero if the shell is  available,  and  zero  if
       not.

       system() does not affect the wait status of any other children.

|


平时还真没留意到command为NULL的情况。

    
 
 

您可能感兴趣的文章:

  • POSIX.1要求system忽略SIGINT和SITQUIT,阻塞SIGCHLD,求解释。UNIX环境高级编程 system函数
  • system()函数返回什么值时,该函数执行成功?返回什么值时,执行出现错误?谢谢
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • 在线等,请问system函数返回值是什么值,怎么判断system运行是否成功?
  • 1。 新建目录的函数是那个? 2。Busybox对C的system函数支持没问题?
  • 关于linux下system函数编程
  • 急问:Linux程序中,使用system函数的几个问题
  • 关于system()函数的问题
  • system()函数用法
  • 调用system(“命令”)和函数调用之间有什么不同?效率?
  • 有关system函数打开网页的
  • system函数执行失败
  • linux system函数调用问题
  • system函数返回值是5,是表示什么意思?
  • 帮忙找找system函数的实现
  • Unix下System函数实现中为何要使用shell去调用执行程序?
  • linux平台下system函数的使用问题
  • 有关system()这个函数
  • 请问如何用system函数切换到root用户
  • linux下system 函数调用不成功,怎么回事?
  • system调用shell命令时的一个疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.sound.midi类shortmessage的类成员方法: system_reset定义及介绍
  • System.exit(0);和System.exit(1)有什么区别?
  • java命名空间javax.swing.text.html.parser接口dtdconstants的类成员方法: system定义及介绍
  • 请问System.out.print和System.out.printIn有什么不同?
  • java命名空间javax.sound.midi类sysexmessage的类成员方法: system_exclusive定义及介绍
  • 谁有 novell 3.12 的SYSTEM_1 和 SYSTEM_2 的软盘内容吗?[分不够可增加]
  • java命名空间javax.xml.transform类outputkeys成员方法: doctype_system定义参考
  • 请问java.lang.System是一个类吧??那么System.out.print()中的out充当什么角色呢?还是类???
  • java命名空间javax.swing类jfilechooser的类成员方法: file_system_view_changed_property定义及介绍
  • 现在用 System.exit(0) or System.exit(1) 来退出弹出窗口,但是连父窗口一起关闭(紧急求解)
  • java命名空间java.lang.management类managementfactory的类成员方法: operating_system_mxbean_name定义及介绍
  • System.out.println() 和System.err.println()有什么区别?THANKS
  • java命名空间java.lang类system的类成员方法: in定义及介绍
  • 深入解析System.load 与 System.loadLibrary
  • java命名空间javax.print.attribute.standard类jobstatereason的类成员方法: aborted_by_system定义及介绍
  • catch异常的时候用System.out.print()和用System.err.print()来输出有什么区别啊?
  • java命名空间java.lang类system的类成员方法: gc定义及介绍
  • system(command) 与 command 的区别
  • java命名空间java.lang类system的类成员方法: console定义及介绍
  • 请问,system.map有用吗?
  • java命名空间java.lang类system的类成员方法: runfinalization定义及介绍
  • 高分请问:用了System.setOut()后怎样才能恢复到默认输出状态?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3