本文整理汇总了C++中cf_pclose函数的典型用法代码示例。如果您正苦于以下问题:C++ cf_pclose函数的具体用法?C++ cf_pclose怎么用?C++ cf_pclose使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cf_pclose函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
}
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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);
}
示例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;
}