$ man -a system
#################################################################
SYSTEM(3) Linux Programmer's Manual SYSTEM(3)
NAME
system - execute a shell command
SYNOPSIS
#include <stdlib.h>
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.
#################################################################
「/bin/sh -c command」について調べてみる
$ man -a bash
#################################################################
BASH(1) BASH(1)
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
・・・・・・・・・・・
OPTIONS
In addition to the single-character shell options documented in the description of the set builtin command, bash interprets the following options when it is invoked:
-c string If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.
#################################################################
以上の情報をまとめると、system関数は/bin/sh -cを与えられた引数をつけて実行することができます。
ディレクトリのファイルを閲覧するlsコマンドを実際に呼び出してみます。
/* myls.c */
#include<stdlib.h> /* system */
int main(void)
{
system("ls");
return 0;
}
/* ここまで*/
$ ./myls
errno mybash myls myrdir myrmdir2 myrmdir3 rmdir.c test.c test1.c
errno.c mybash.c myls.c myrmdir myrmdir2.c myrmdir3.c test test1