xsystem.c

来自「this is the pkg installer for linux」· C语言 代码 · 共 65 行

C
65
字号
/* xsystem.c - system(3) with error messages   Carl D. Worth   Copyright (C) 2001 University of Southern California   This program is free software; you can redistribute it and/or   modify it under the terms of the GNU General Public License as   published by the Free Software Foundation; either version 2, or (at   your option) any later version.   This program is distributed in the hope that it will be useful, but   WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   General Public License for more details.*/#include "ipkg.h"#include <sys/wait.h>#include "xsystem.h"/* XXX: FEATURE: I shouldn't actually use system(3) at all. I don't   really need the /bin/sh invocation which takes resources and   introduces security problems. I should switch all of this to a sort   of execl() or execv() interface/implementation.*//* Like system(3), but with error messages printed if the fork fails   or if the child process dies due to an uncaught signal. Also, the   return value is a bit simpler:   -1 if there was any problem   Otherwise, the 8-bit return value of the program ala WEXITSTATUS   as defined in <sys/wait.h>.*/int xsystem(const char *cmd){    int err;    err = system(cmd);    if (err == -1) {	fprintf(stderr, "%s: ERROR: fork failed before execution: `%s'\n",		__FUNCTION__, cmd);	return -1;    }    if (WIFSIGNALED(err)) {	fprintf(stderr, "%s: ERROR: Child process died due to signal %d: `%s'\n",		__FUNCTION__, WTERMSIG(err), cmd);	return -1;    }    if (WIFEXITED(err)) {	/* Normal child exit */	return WEXITSTATUS(err);    }    fprintf(stderr, "%s: ERROR: Received unintelligible return value from system: %d",	    __FUNCTION__, err);    return -1;}	 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?