system()関数は、呼び出しているプロセスから取得した終了コードの128倍を返しているようです。
マニュアルページから:
戻り値エラーの場合(たとえば、fork(2)が失敗した場合)、返される値は-1であり、それ以外の場合はコマンドの戻りステータスです。
これが私が持っているものです。
$ ls tinker.c
tinker.c
$ echo $?
0
$ ls notexisting
ls: cannot access notexisting: No such file or directory
$ echo $?
2
$ cat tinker.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d\n", system("ls tinker.c"));
printf("%d\n", system("ls notexisting"));
return 0;
}
$ gcc tinker.c -o tinker
$ ./tinker
tinker.c
0
ls: cannot access notexisting: No such file or directory
512
最初の呼び出しは、失敗が発生していないことを示していますが、戻りコードは、マニュアルページから読み取っているものとはまったく異なります。私は何が間違っているのですか?