<html lang="en">
<head>
<title>system - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="List-of-Supported-Calls.html#List-of-Supported-Calls" title="List of Supported Calls">
<link rel="prev" href="isatty.html#isatty" title="isatty">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="system"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="isatty.html#isatty">isatty</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="List-of-Supported-Calls.html#List-of-Supported-Calls">List of Supported Calls</a>
<hr>
</div>

<h5 class="unnumberedsubsubsec">system</h5>

<p><a name="index-system_002c-file_002di_002fo-system-call-2515"></a>
     <dl>
<dt>Synopsis:<dd>
     <pre class="smallexample">          int system(const char *command);
</pre>
     <br><dt>Request:<dd>&lsquo;<samp><span class="samp">Fsystem,</span><var>commandptr</var><span class="samp">/</span><var>len</var></samp>&rsquo;

     <br><dt>Return value:<dd>If <var>len</var> is zero, the return value indicates whether a shell is
available.  A zero return value indicates a shell is not available. 
For non-zero <var>len</var>, the value returned is -1 on error and the
return status of the command otherwise.  Only the exit status of the
command is returned, which is extracted from the host's <code>system</code>
return value by calling <code>WEXITSTATUS(retval)</code>.  In case
<samp><span class="file">/bin/sh</span></samp> could not be executed, 127 is returned.

     <br><dt>Errors:<dd>
          <dl>
<dt><code>EINTR</code><dd>The call was interrupted by the user. 
</dl>

   </dl>

   <p><span class="sc">gdb</span> takes over the full task of calling the necessary host calls
to perform the <code>system</code> call.  The return value of <code>system</code> on
the host is simplified before it's returned
to the target.  Any termination signal information from the child process
is discarded, and the return value consists
entirely of the exit status of the called command.

   <p>Due to security concerns, the <code>system</code> call is by default refused
by <span class="sc">gdb</span>.  The user has to allow this call explicitly with the
<code>set remote system-call-allowed 1</code> command.

     <dl>
<dt><code>set remote system-call-allowed</code><dd><a name="index-set-remote-system_002dcall_002dallowed-2516"></a>Control whether to allow the <code>system</code> calls in the File I/O
protocol for the remote target.  The default is zero (disabled).

     <br><dt><code>show remote system-call-allowed</code><dd><a name="index-show-remote-system_002dcall_002dallowed-2517"></a>Show whether the <code>system</code> calls are allowed in the File I/O
protocol. 
</dl>

   </body></html>

