本文整理汇总了C++中cf_pclose函数的典型用法代码示例。如果您正苦于以下问题:C++ cf_pclose函数的具体用法?C++ cf_pclose怎么用?C++ cf_pclose使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cf_pclose函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: SelectExecRegexMatch
static int SelectExecRegexMatch(char *filename, char *crit, char *prog)
{
char line[CF_BUFSIZE];
FILE *pp;
char buf[CF_MAXVARSIZE];
// insert real value of $(this.promiser) in command
ReplaceStr(prog, buf, sizeof(buf), "$(this.promiser)", filename);
ReplaceStr(prog, buf, sizeof(buf), "${this.promiser}", filename);
if ((pp = cf_popen(buf, "r")) == NULL)
{
CfOut(cf_error, "cf_popen", "Couldn't open pipe to command %s\n", buf);
return false;
}
while (!feof(pp))
{
line[0] = '\0';
CfReadLine(line, CF_BUFSIZE, pp); /* One buffer only */
if (FullTextMatch(crit, line))
{
cf_pclose(pp);
return true;
}
}
cf_pclose(pp);
return false;
}
开发者ID:xrg,项目名称:cfengine-core,代码行数:32,代码来源:files_select.c
示例2: VerifyMount
int VerifyMount(char *name, Attributes a, Promise *pp)
{
char comm[CF_BUFSIZE], line[CF_BUFSIZE];
FILE *pfp;
char *host, *rmountpt, *mountpt;
host = a.mount.mount_server;
rmountpt = a.mount.mount_source;
mountpt = name;
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s %s:%s %s", GetArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]), host, rmountpt, mountpt);
if ((pfp = cf_popen(comm, "r")) == NULL)
{
CfOut(cf_error, "", " !! Failed to open pipe from %s\n", GetArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]));
return 0;
}
CfReadLine(line, CF_BUFSIZE, pfp);
if (strstr(line, "busy") || strstr(line, "Busy"))
{
cfPS(cf_inform, CF_INTERPT, "", pp, a, " !! The device under %s cannot be mounted\n", mountpt);
cf_pclose(pfp);
return 1;
}
cf_pclose(pfp);
}
cfPS(cf_inform, CF_CHG, "", pp, a, " -> Mounting %s to keep promise\n", mountpt);
return 0;
}
开发者ID:joegen,项目名称:sipx-externals,代码行数:35,代码来源:nfs.c
示例3: VerifyUnmount
int VerifyUnmount(char *name, Attributes a, Promise *pp)
{
char comm[CF_BUFSIZE], line[CF_BUFSIZE];
FILE *pfp;
char *mountpt;
mountpt = name;
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s %s", VUNMOUNTCOMM[VSYSTEMHARDCLASS], mountpt);
if ((pfp = cf_popen(comm, "r")) == NULL)
{
CfOut(cf_error, "", " !! Failed to open pipe from %s\n", VUNMOUNTCOMM[VSYSTEMHARDCLASS]);
return 0;
}
CfReadLine(line, CF_BUFSIZE, pfp);
if ((strstr(line, "busy")) || (strstr(line, "Busy")))
{
cfPS(cf_inform, CF_INTERPT, "", pp, a, " !! The device under %s cannot be unmounted\n", mountpt);
cf_pclose(pfp);
return 1;
}
cf_pclose(pfp);
}
cfPS(cf_inform, CF_CHG, "", pp, a, " -> Unmounting %s to keep promise\n", mountpt);
return 0;
}
开发者ID:werkt,项目名称:cfengine-community,代码行数:33,代码来源:nfs.c
示例4: VerifyMount
int VerifyMount(EvalContext *ctx, char *name, Attributes a, Promise *pp)
{
char comm[CF_BUFSIZE], line[CF_BUFSIZE];
FILE *pfp;
char *host, *rmountpt, *mountpt, *opts=NULL;
host = a.mount.mount_server;
rmountpt = a.mount.mount_source;
mountpt = name;
/* Check for options required for this mount - i.e., -o ro,rsize, etc. */
if (a.mount.mount_options)
{
opts = Rlist2String(a.mount.mount_options, ",");
}
else
{
opts = xstrdup(VMOUNTOPTS[VSYSTEMHARDCLASS]);
}
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s -o %s %s:%s %s", CommandArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]), opts, host, rmountpt, mountpt);
if ((pfp = cf_popen(comm, "r", true)) == NULL)
{
Log(LOG_LEVEL_ERR, "Failed to open pipe from %s", CommandArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]));
return 0;
}
ssize_t res = CfReadLine(line, CF_BUFSIZE, pfp);
if (res == -1)
{
Log(LOG_LEVEL_ERR, "Unable to read output of mount command. (fread: %s)", GetErrorStr());
cf_pclose(pfp);
return 0;
}
if (res != 0 && ((strstr(line, "busy")) || (strstr(line, "Busy"))))
{
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_INTERRUPTED, pp, a, "The device under %s cannot be mounted\n", mountpt);
cf_pclose(pfp);
return 1;
}
cf_pclose(pfp);
}
/* Since opts is either Rlist2String or xstrdup'd, we need to always free it */
free(opts);
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_CHANGE, pp, a, "Mounting %s to keep promise\n", mountpt);
return 0;
}
开发者ID:ouafae31,项目名称:core,代码行数:55,代码来源:nfs.c
示例5: VerifyMount
int VerifyMount(char *name, Attributes a, Promise *pp)
{
char comm[CF_BUFSIZE], line[CF_BUFSIZE];
FILE *pfp;
char *host, *rmountpt, *mountpt, *opts=NULL;
host = a.mount.mount_server;
rmountpt = a.mount.mount_source;
mountpt = name;
/* Check for options required for this mount - i.e., -o ro,rsize, etc. */
if (a.mount.mount_options)
{
opts = Rlist2String(a.mount.mount_options, ",");
}
else
{
opts = xstrdup(VMOUNTOPTS[VSYSTEMHARDCLASS]);
}
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s -o %s %s:%s %s", GetArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]), opts, host, rmountpt, mountpt);
if ((pfp = cf_popen(comm, "r")) == NULL)
{
CfOut(cf_error, "", " !! Failed to open pipe from %s\n", GetArg0(VMOUNTCOMM[VSYSTEMHARDCLASS]));
return 0;
}
if (CfReadLine(line, CF_BUFSIZE, pfp) == -1)
{
FatalError("Error in CfReadLine");
}
if ((strstr(line, "busy")) || (strstr(line, "Busy")))
{
cfPS(cf_inform, CF_INTERPT, "", pp, a, " !! The device under %s cannot be mounted\n", mountpt);
cf_pclose(pfp);
return 1;
}
cf_pclose(pfp);
}
/* Since opts is either Rlist2String or xstrdup'd, we need to always free it */
free(opts);
cfPS(cf_inform, CF_CHG, "", pp, a, " -> Mounting %s to keep promise\n", mountpt);
return 0;
}
开发者ID:bruvik,项目名称:cfengine-core,代码行数:51,代码来源:nfs.c
示例6: VerifyUnmount
PromiseResult VerifyUnmount(EvalContext *ctx, char *name, const Attributes *a, const Promise *pp)
{
char comm[CF_BUFSIZE];
FILE *pfp;
char *mountpt;
mountpt = name;
PromiseResult result = PROMISE_RESULT_NOOP;
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s %s", VUNMOUNTCOMM[VSYSTEMHARDCLASS], mountpt);
if ((pfp = cf_popen(comm, "r", true)) == NULL)
{
Log(LOG_LEVEL_ERR, "Failed to open pipe from %s", VUNMOUNTCOMM[VSYSTEMHARDCLASS]);
return result;
}
size_t line_size = CF_BUFSIZE;
char *line = xmalloc(line_size);
ssize_t res = CfReadLine(&line, &line_size, pfp);
if (res == -1)
{
cf_pclose(pfp);
free(line);
if (!feof(pfp))
{
Log(LOG_LEVEL_ERR, "Unable to read output of unmount command. (fread: %s)", GetErrorStr());
return result;
}
}
else if (res > 0 && ((strstr(line, "busy")) || (strstr(line, "Busy"))))
{
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_INTERRUPTED, pp, a, "The device under '%s' cannot be unmounted", mountpt);
result = PromiseResultUpdate(result, PROMISE_RESULT_INTERRUPTED);
cf_pclose(pfp);
free(line);
return result;
}
}
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_CHANGE, pp, a, "Unmounting '%s' to keep promise", mountpt);
result = PromiseResultUpdate(result, PROMISE_RESULT_CHANGE);
return result;
}
开发者ID:basvandervlies,项目名称:core,代码行数:48,代码来源:nfs.c
示例7: SelectExecRegexMatch
static bool SelectExecRegexMatch(EvalContext *ctx, char *filename, char *crit, char *prog)
{
// insert real value of $(this.promiser) in command
char *buf_tmp = SearchAndReplace(prog, "$(this.promiser)", filename);
char *buf = SearchAndReplace(buf_tmp, "${this.promiser}", filename);
free(buf_tmp);
FILE *pp = cf_popen(buf, "r", true);
if (pp == NULL)
{
Log(LOG_LEVEL_ERR, "Couldn't open pipe to command '%s'. (cf_popen: %s)", buf, GetErrorStr());
free(buf);
return false;
}
size_t line_size = CF_BUFSIZE;
char *line = xmalloc(line_size);
for (;;)
{
ssize_t res = CfReadLine(&line, &line_size, pp);
if (res == -1)
{
if (!feof(pp))
{
Log(LOG_LEVEL_ERR, "Error reading output from command '%s'. (fgets: %s)", buf, GetErrorStr());
}
cf_pclose(pp);
free(line);
free(buf);
return false;
}
if (FullTextMatch(ctx, crit, line))
{
cf_pclose(pp);
free(line);
free(buf);
return true;
}
}
cf_pclose(pp);
free(line);
free(buf);
return false;
}
开发者ID:AsherBond,项目名称:core,代码行数:48,代码来源:files_select.c
示例8: RunCmpCommand
static VersionCmpResult RunCmpCommand(const char *command, const char *v1, const char *v2, Attributes a, Promise *pp)
{
char expanded_command[CF_EXPANDSIZE];
SetNewScope("cf_pack_context");
NewScalar("cf_pack_context", "v1", v1, cf_str);
NewScalar("cf_pack_context", "v2", v2, cf_str);
ExpandScalar(command, expanded_command);
DeleteScope("cf_pack_context");
FILE *pfp = a.packages.package_commands_useshell ? cf_popen_sh(expanded_command, "w") : cf_popen(expanded_command, "w");
if (pfp == NULL)
{
cfPS(cf_error, CF_FAIL, "cf_popen", pp, a, "Can not start package version comparison command: %s", expanded_command);
return VERCMP_ERROR;
}
CfOut(cf_verbose, "", "Executing %s", expanded_command);
int retcode = cf_pclose(pfp);
if (retcode == -1)
{
cfPS(cf_error, CF_FAIL, "cf_pclose", pp, a, "Error during package version comparison command execution: %s",
expanded_command);
return VERCMP_ERROR;
}
return retcode == 0;
}
开发者ID:FraserMCampbell,项目名称:core,代码行数:31,代码来源:vercmp.c
示例9: MonNetworkSnifferOpen
void MonNetworkSnifferOpen(void)
{
char tcpbuffer[CF_BUFSIZE];
if (TCPDUMP)
{
struct stat statbuf;
char buffer[CF_MAXVARSIZE];
sscanf(CF_TCPDUMP_COMM, "%s", buffer);
if (stat(buffer, &statbuf) != -1)
{
if ((TCPPIPE = cf_popen(CF_TCPDUMP_COMM, "r", true)) == NULL)
{
TCPDUMP = false;
}
/* Skip first banner */
if (fgets(tcpbuffer, sizeof(tcpbuffer), TCPPIPE) == NULL)
{
UnexpectedError("Failed to read output from '%s'", CF_TCPDUMP_COMM);
cf_pclose(TCPPIPE);
TCPPIPE = NULL;
TCPDUMP = false;
}
}
else
{
TCPDUMP = false;
}
}
}
开发者ID:salewski,项目名称:cfengine-core,代码行数:33,代码来源:mon_network_sniffer.c
示例10: SupportsOption
static bool SupportsOption(const char *cmd, const char *option)
{
bool supports_option = false;
char help_argument[] = " --help";
char help_command[strlen(cmd) + sizeof(help_argument)];
xsnprintf(help_command, sizeof(help_command), "%s%s", cmd, help_argument);
FILE *fptr = cf_popen(help_command, "r", true);
char *buf = NULL;
size_t bufsize = 0;
size_t optlen = strlen(option);
while (CfReadLine(&buf, &bufsize, fptr) >= 0)
{
char *m_pos = buf;
while ((m_pos = strstr(m_pos, option)))
{
// Check against false alarms, e.g. hyphenated words in normal text or an
// option (say, "-M") that is part of "--M".
if ((m_pos == buf
|| (m_pos[-1] != '-' && (isspace(m_pos[-1]) || ispunct(m_pos[-1]))))
&& (m_pos[optlen] == '\0'
|| (isspace(m_pos[optlen]) || ispunct(m_pos[optlen]))))
{
supports_option = true;
// Break out of strstr loop, but read till the end to avoid broken pipes.
break;
}
m_pos++;
}
}
cf_pclose(fptr);
free(buf);
return supports_option;
}
开发者ID:basvandervlies,项目名称:core,代码行数:35,代码来源:verify_users_pam.c
示例11: SelectExecRegexMatch
static bool SelectExecRegexMatch(EvalContext *ctx, char *filename, char *crit, char *prog)
{
char line[CF_BUFSIZE];
FILE *pp;
char buf[CF_MAXVARSIZE];
// insert real value of $(this.promiser) in command
ReplaceStr(prog, buf, sizeof(buf), "$(this.promiser)", filename);
ReplaceStr(prog, buf, sizeof(buf), "${this.promiser}", filename);
if ((pp = cf_popen(buf, "r", true)) == NULL)
{
Log(LOG_LEVEL_ERR, "Couldn't open pipe to command '%s'. (cf_popen: %s)", buf, GetErrorStr());
return false;
}
for (;;)
{
ssize_t res = CfReadLine(line, CF_BUFSIZE, pp);
if (res == -1)
{
Log(LOG_LEVEL_ERR, "Error reading output from command '%s'. (fgets: %s)", buf, GetErrorStr());
cf_pclose(pp);
return false;
}
if (res == 0)
{
cf_pclose(pp);
return false;
}
if (FullTextMatch(ctx, crit, line))
{
cf_pclose(pp);
return true;
}
}
cf_pclose(pp);
return false;
}
开发者ID:nperron,项目名称:core,代码行数:43,代码来源:files_select.c
示例12: ChangePasswordHashUsingChpasswd
static bool ChangePasswordHashUsingChpasswd(const char *puser, const char *password)
{
int status;
const char *cmd_str = CHPASSWD " -e";
Log(LOG_LEVEL_VERBOSE, "Changing password hash for user '%s'. (command: '%s')", puser, cmd_str);
FILE *cmd = cf_popen_sh(cmd_str, "w");
if (!cmd)
{
Log(LOG_LEVEL_ERR, "Could not launch password changing command '%s': %s.", cmd_str, GetErrorStr());
return false;
}
// String lengths plus a ':' and a '\n', but not including '\0'.
size_t total_len = strlen(puser) + strlen(password) + 2;
char change_string[total_len + 1];
xsnprintf(change_string, total_len + 1, "%s:%s\n", puser, password);
clearerr(cmd);
if (fwrite(change_string, total_len, 1, cmd) != 1)
{
const char *error_str;
if (ferror(cmd))
{
error_str = GetErrorStr();
}
else
{
error_str = "Unknown error";
}
Log(LOG_LEVEL_ERR, "Could not write password to password changing command '%s': %s.", cmd_str, error_str);
cf_pclose(cmd);
return false;
}
status = cf_pclose(cmd);
if (status)
{
Log(LOG_LEVEL_ERR, "'%s' returned non-zero status: %i\n", cmd_str, status);
return false;
}
return true;
}
开发者ID:basvandervlies,项目名称:core,代码行数:41,代码来源:verify_users_pam.c
示例13: VerifyUnmount
int VerifyUnmount(EvalContext *ctx, char *name, Attributes a, Promise *pp)
{
char comm[CF_BUFSIZE], line[CF_BUFSIZE];
FILE *pfp;
char *mountpt;
mountpt = name;
if (!DONTDO)
{
snprintf(comm, CF_BUFSIZE, "%s %s", VUNMOUNTCOMM[VSYSTEMHARDCLASS], mountpt);
if ((pfp = cf_popen(comm, "r", true)) == NULL)
{
Log(LOG_LEVEL_ERR, "Failed to open pipe from %s", VUNMOUNTCOMM[VSYSTEMHARDCLASS]);
return 0;
}
ssize_t res = CfReadLine(line, CF_BUFSIZE, pfp);
if (res == -1)
{
Log(LOG_LEVEL_ERR, "Unable to read output of unmount command. (fread: %s)", GetErrorStr());
cf_pclose(pfp);
return 0;
}
if (res != 0 && ((strstr(line, "busy")) || (strstr(line, "Busy"))))
{
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_INTERRUPTED, pp, a, "The device under %s cannot be unmounted\n", mountpt);
cf_pclose(pfp);
return 1;
}
cf_pclose(pfp);
}
cfPS(ctx, LOG_LEVEL_INFO, PROMISE_RESULT_CHANGE, pp, a, "Unmounting %s to keep promise\n", mountpt);
return 0;
}
开发者ID:ouafae31,项目名称:core,代码行数:40,代码来源:nfs.c
示例14: MD5Random
static void MD5Random(unsigned char digest[EVP_MAX_MD_SIZE + 1])
/* Make a decent random number by crunching some system states & garbage through
MD5. We can use this as a seed for pseudo random generator */
{
unsigned char buffer[CF_BUFSIZE];
char pscomm[CF_BUFSIZE];
char uninitbuffer[100];
int md_len;
const EVP_MD *md;
EVP_MD_CTX context;
FILE *pp;
CfOut(cf_verbose, "", "Looking for a random number seed...\n");
#ifdef HAVE_NOVA
md = EVP_get_digestbyname("sha256");
#else
md = EVP_get_digestbyname("md5");
#endif
EVP_DigestInit(&context, md);
CfOut(cf_verbose, "", "...\n");
snprintf(buffer, CF_BUFSIZE, "%d%d%25s", (int) CFSTARTTIME, (int) *digest, VFQNAME);
EVP_DigestUpdate(&context, buffer, CF_BUFSIZE);
snprintf(pscomm, CF_BUFSIZE, "%s %s", VPSCOMM[VSYSTEMHARDCLASS], VPSOPTS[VSYSTEMHARDCLASS]);
if ((pp = cf_popen(pscomm, "r")) != NULL)
{
CfOut(cf_error, "cf_popen", "Couldn't open the process list with command %s\n", pscomm);
while (!feof(pp))
{
CfReadLine(buffer, CF_BUFSIZE, pp);
EVP_DigestUpdate(&context, buffer, CF_BUFSIZE);
}
}
uninitbuffer[99] = '\0';
snprintf(buffer, CF_BUFSIZE - 1, "%ld %s", time(NULL), uninitbuffer);
EVP_DigestUpdate(&context, buffer, CF_BUFSIZE);
cf_pclose(pp);
EVP_DigestFinal(&context, digest, &md_len);
}
开发者ID:fbettag,项目名称:core,代码行数:49,代码来源:crypto.c
示例15: RunCmpCommand
static VersionCmpResult RunCmpCommand(EvalContext *ctx, const char *command, const char *v1, const char *v2, Attributes a,
const Promise *pp, PromiseResult *result)
{
Buffer *expanded_command = BufferNew();
{
VarRef *ref_v1 = VarRefParseFromScope("v1", PACKAGES_CONTEXT);
EvalContextVariablePut(ctx, ref_v1, v1, CF_DATA_TYPE_STRING, "source=promise");
VarRef *ref_v2 = VarRefParseFromScope("v2", PACKAGES_CONTEXT);
EvalContextVariablePut(ctx, ref_v2, v2, CF_DATA_TYPE_STRING, "source=promise");
ExpandScalar(ctx, NULL, PACKAGES_CONTEXT, command, expanded_command);
EvalContextVariableRemove(ctx, ref_v1);
VarRefDestroy(ref_v1);
EvalContextVariableRemove(ctx, ref_v2);
VarRefDestroy(ref_v2);
}
FILE *pfp = a.packages.package_commands_useshell ? cf_popen_sh(BufferData(expanded_command), "w") : cf_popen(BufferData(expanded_command), "w", true);
if (pfp == NULL)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_FAIL, pp, a, "Can not start package version comparison command '%s'. (cf_popen: %s)",
BufferData(expanded_command), GetErrorStr());
*result = PromiseResultUpdate(*result, PROMISE_RESULT_FAIL);
BufferDestroy(expanded_command);
return VERCMP_ERROR;
}
Log(LOG_LEVEL_VERBOSE, "Executing '%s'", BufferData(expanded_command));
int retcode = cf_pclose(pfp);
if (retcode == -1)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_FAIL, pp, a, "Error during package version comparison command execution '%s'. (cf_pclose: %s)",
BufferData(expanded_command), GetErrorStr());
*result = PromiseResultUpdate(*result, PROMISE_RESULT_FAIL);
BufferDestroy(expanded_command);
return VERCMP_ERROR;
}
BufferDestroy(expanded_command);
return retcode == 0;
}
开发者ID:ddurieux,项目名称:core,代码行数:48,代码来源:vercmp.c
示例16: Sniff
static void Sniff(Item *ip_addresses, long iteration, double *cf_this)
{
char tcpbuffer[CF_BUFSIZE];
Log(LOG_LEVEL_VERBOSE, "Reading from tcpdump...");
memset(tcpbuffer, 0, CF_BUFSIZE);
signal(SIGALRM, CfenvTimeOut);
alarm(SLEEPTIME);
TCPPAUSE = false;
while (!feof(TCPPIPE) && !IsPendingTermination())
{
if (TCPPAUSE)
{
break;
}
if (fgets(tcpbuffer, sizeof(tcpbuffer), TCPPIPE) == NULL)
{
UnexpectedError("Unable to read data from tcpdump; closing pipe");
cf_pclose(TCPPIPE);
TCPPIPE = NULL;
TCPDUMP = false;
break;
}
if (TCPPAUSE)
{
break;
}
if (strstr(tcpbuffer, "tcpdump:")) /* Error message protect sleeptime */
{
Log(LOG_LEVEL_DEBUG, "Error - '%s'", tcpbuffer);
alarm(0);
TCPDUMP = false;
break;
}
AnalyzeArrival(ip_addresses, iteration, tcpbuffer, cf_this);
}
signal(SIGALRM, SIG_DFL);
TCPPAUSE = false;
fflush(TCPPIPE);
}
开发者ID:salewski,项目名称:cfengine-core,代码行数:46,代码来源:mon_network_sniffer.c
示例17: Unix_GatherProcessUsers
static int Unix_GatherProcessUsers(struct Item **userList, int *userListSz, int *numRootProcs, int *numOtherProcs)
{
FILE *pp;
char pscomm[CF_BUFSIZE];
char user[CF_MAXVARSIZE];
char vbuff[CF_BUFSIZE];
snprintf(pscomm,CF_BUFSIZE,"%s %s",VPSCOMM[VSYSTEMHARDCLASS],VPSOPTS[VSYSTEMHARDCLASS]);
if ((pp = cf_popen(pscomm,"r")) == NULL)
{
return false;
}
CfReadLine(vbuff,CF_BUFSIZE,pp);
while (!feof(pp))
{
CfReadLine(vbuff,CF_BUFSIZE,pp);
sscanf(vbuff,"%s",user);
if (strcmp(user,"USER") == 0)
{
continue;
}
if (!IsItemIn(*userList,user))
{
PrependItem(userList,user,NULL);
(*userListSz)++;
}
if (strcmp(user,"root") == 0)
{
(*numRootProcs)++;
}
else
{
(*numOtherProcs)++;
}
}
cf_pclose(pp);
return true;
}
开发者ID:Kegeruneku,项目名称:Cfengine-debian,代码行数:45,代码来源:mon_processes.c
示例18: RunCmpCommand
static VersionCmpResult RunCmpCommand(EvalContext *ctx, const char *command, const char *v1, const char *v2, Attributes a, Promise *pp)
{
char expanded_command[CF_EXPANDSIZE];
{
VarRef *ref_v1 = VarRefParseFromScope("v1", "cf_pack_context");
EvalContextVariablePut(ctx, ref_v1, (Rval) { v1, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
VarRef *ref_v2 = VarRefParseFromScope("v2", "cf_pack_context");
EvalContextVariablePut(ctx, ref_v2, (Rval) { v2, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
ExpandScalar(ctx, NULL, "cf_pack_context", command, expanded_command);
EvalContextVariableRemove(ctx, ref_v1);
VarRefDestroy(ref_v1);
EvalContextVariableRemove(ctx, ref_v2);
VarRefDestroy(ref_v2);
}
FILE *pfp = a.packages.package_commands_useshell ? cf_popen_sh(expanded_command, "w") : cf_popen(expanded_command, "w", true);
if (pfp == NULL)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_FAIL, pp, a, "Can not start package version comparison command '%s'. (cf_popen: %s)",
expanded_command, GetErrorStr());
return VERCMP_ERROR;
}
Log(LOG_LEVEL_VERBOSE, "Executing '%s'", expanded_command);
int retcode = cf_pclose(pfp);
if (retcode == -1)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_FAIL, pp, a, "Error during package version comparison command execution '%s'. (cf_pclose: %s)",
expanded_command, GetErrorStr());
return VERCMP_ERROR;
}
return retcode == 0;
}
开发者ID:nperron,项目名称:core,代码行数:42,代码来源:vercmp.c
示例19: LoadPlatformExtraTable
static void LoadPlatformExtraTable(void)
{
if (UCB_PS_MAP)
{
return;
}
UCB_PS_MAP = StringMapNew();
FILE *cmd = OpenUcbPsPipe();
if (!cmd)
{
return;
}
ReadFromUcbPsPipe(cmd);
if (cf_pclose(cmd) != 0)
{
Log(LOG_LEVEL_WARNING, "Command returned non-zero while gathering "
"extra process information.");
// Make an empty map, in this case. The information can't be trusted.
StringMapClear(UCB_PS_MAP);
}
}
开发者ID:atsaloli,项目名称:core,代码行数:23,代码来源:processes_select.c
示例20: MountAll
void MountAll()
{
char line[CF_BUFSIZE];
FILE *pp;
if (DONTDO)
{
CfOut(cf_verbose, "", "Promised to mount filesystem, but not on this trial run\n");
return;
}
else
{
CfOut(cf_verbose, "", " -> Attempting to mount all filesystems.\n");
}
#if defined(__CYGWIN__)
/* This is a shell script. Make sure it hasn't been compromised. */
struct stat sb;
if (cfstat("/etc/fstab", &sb) == -1)
{
int fd;
if ((fd = creat("/etc/fstab", 0755)) > 0)
{
if (write(fd, "#!/bin/sh\n\n", 10) != 10)
{
UnexpectedError("Failed to write to file '/etc/fstab'");
}
close(fd);
}
else
{
if (sb.st_mode & (S_IWOTH | S_IWGRP))
{
CfOut(cf_error, "", "File /etc/fstab was insecure. Cannot mount filesystems.\n");
return;
}
}
}
#endif
SetTimeOut(RPCTIMEOUT);
if ((pp = cf_popen(VMOUNTCOMM[VSYSTEMHARDCLASS], "r")) == NULL)
{
CfOut(cf_error, "cf_popen", "Failed to open pipe from %s\n", VMOUNTCOMM[VSYSTEMHARDCLASS]);
return;
}
while (!feof(pp))
{
if (ferror(pp)) /* abortable */
{
CfOut(cf_inform, "ferror", "Error mounting filesystems\n");
break;
}
if (CfReadLine(line, CF_BUFSIZE, pp) == -1)
{
FatalError("Error in CfReadLine");
}
if (ferror(pp)) /* abortable */
{
CfOut(cf_inform, "ferror", "Error mounting filesystems\n");
break;
}
if ((strstr(line, "already mounted")) || (strstr(line, "exceeded")) || (strstr(line, "determined")))
{
continue;
}
if (strstr(line, "not supported"))
{
continue;
}
if ((strstr(line, "denied")) || (strstr(line, "RPC")))
{
CfOut(cf_error, "", "There was a mount error, trying to mount one of the filesystems on this host.\n");
break;
}
if ((strstr(line, "trying")) && (!strstr(line, "NFS version 2")) && (!strstr(line, "vers 3")))
{
CfOut(cf_error, "", "Attempting abort because mount went into a retry loop.\n");
break;
}
}
alarm(0);
signal(SIGALRM, SIG_DFL);
cf_pclose(pp);
}
开发者ID:bruvik,项目名称:cfengine-core,代码行数:96,代码来源:nfs.c
注:本文中的cf_pclose函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论