本文整理汇总了C++中CfReadLine函数的典型用法代码示例。如果您正苦于以下问题:C++ CfReadLine函数的具体用法?C++ CfReadLine怎么用?C++ CfReadLine使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CfReadLine函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: 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
示例2: 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
示例3: 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
示例4: 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
示例5: 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
示例6: 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
示例7: 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
示例8: 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
示例9: 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
示例10: 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
示例11: CheckPsLineLimitations
static void CheckPsLineLimitations(void)
{
#ifdef __hpux
FILE *ps_fd;
int ret;
char limit[21];
char *buf = NULL;
size_t bufsize = 0;
ps_fd = fopen("/etc/default/ps", "r");
if (!ps_fd)
{
Log(LOG_LEVEL_VERBOSE, "Could not open '/etc/default/ps' "
"to check ps line length limitations.");
return;
}
while (true)
{
ret = CfReadLine(&buf, &bufsize, ps_fd);
if (ret < 0)
{
break;
}
ret = sscanf(buf, "DEFAULT_CMD_LINE_WIDTH = %20[0-9]", limit);
if (ret == 1)
{
if (atoi(limit) < 1024)
{
Log(LOG_LEVEL_VERBOSE, "ps line length limit is less than 1024. "
"Consider adjusting the DEFAULT_CMD_LINE_WIDTH setting in /etc/default/ps "
"in order to guarantee correct process matching.");
}
break;
}
}
free(buf);
fclose(ps_fd);
#endif // __hpux
}
开发者ID:atsaloli,项目名称:core,代码行数:43,代码来源:processes_select.c
示例12: test_cfreadline_corrupted
static void test_cfreadline_corrupted(void)
{
int read = 0;
char output[CF_BUFSIZE] = { 0 };
FILE *fin;
CreateCorruptedGarbage(FILE_NAME);
fin = fopen(FILE_NAME, "r");
//test with non-empty file and valid file pointer
read = CfReadLine(output, CF_BUFSIZE, fin);
assert_true(read > 0);
assert_string_not_equal(output, FILE_LINE);
if (fin)
{
fclose(fin);
}
}
开发者ID:cduclos,项目名称:core,代码行数:19,代码来源:files_interfaces_test.c
示例13: 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
示例14: PrintFile
static bool PrintFile(const char *filename, size_t max_lines)
{
if (!filename)
{
Log(LOG_LEVEL_VERBOSE, "Printfile promise was incomplete, with no filename.");
return false;
}
FILE *fp = safe_fopen(filename, "r");
if (!fp)
{
Log(LOG_LEVEL_ERR, "Printing of file '%s' was not possible. (fopen: %s)", filename, GetErrorStr());
return false;
}
size_t line_size = CF_BUFSIZE;
char *line = xmalloc(line_size);
for (size_t i = 0; i < max_lines; i++)
{
if (CfReadLine(&line, &line_size, fp) == -1)
{
if (ferror(fp))
{
Log(LOG_LEVEL_ERR, "Failed to read line from stream, (getline: %s)", GetErrorStr());
free(line);
return false;
}
else
{
break;
}
}
ReportToLog(line);
}
fclose(fp);
free(line);
return true;
}
开发者ID:dstam,项目名称:core,代码行数:42,代码来源:verify_reports.c
示例15: 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
示例16: LoadProcessTable
int LoadProcessTable(EvalContext *ctx, Item **procdata)
{
FILE *prp;
char pscomm[CF_MAXLINKSIZE], vbuff[CF_BUFSIZE], *sp;
Item *rootprocs = NULL;
Item *otherprocs = NULL;
if (PROCESSTABLE)
{
Log(LOG_LEVEL_VERBOSE, "Reusing cached process table");
return true;
}
const char *psopts = GetProcessOptions();
snprintf(pscomm, CF_MAXLINKSIZE, "%s %s", VPSCOMM[VSYSTEMHARDCLASS], psopts);
Log(LOG_LEVEL_VERBOSE, "Observe process table with %s", pscomm);
if ((prp = cf_popen(pscomm, "r", false)) == NULL)
{
Log(LOG_LEVEL_ERR, "Couldn't open the process list with command '%s'. (popen: %s)", pscomm, GetErrorStr());
return false;
}
for (;;)
{
ssize_t res = CfReadLine(vbuff, CF_BUFSIZE, prp);
if (res == 0)
{
break;
}
if (res == -1)
{
Log(LOG_LEVEL_ERR, "Unable to read process list with command '%s'. (fread: %s)", pscomm, GetErrorStr());
cf_pclose(prp);
return false;
}
for (sp = vbuff + strlen(vbuff) - 1; (sp > vbuff) && (isspace((int)*sp)); sp--)
{
*sp = '\0';
}
if (ForeignZone(vbuff))
{
continue;
}
AppendItem(procdata, vbuff, "");
}
cf_pclose(prp);
/* Now save the data */
snprintf(vbuff, CF_MAXVARSIZE, "%s/state/cf_procs", CFWORKDIR);
RawSaveItemList(*procdata, vbuff);
CopyList(&rootprocs, *procdata);
CopyList(&otherprocs, *procdata);
while (DeleteItemNotContaining(ctx, &rootprocs, "root"))
{
}
while (DeleteItemContaining(ctx, &otherprocs, "root"))
{
}
if (otherprocs)
{
PrependItem(&rootprocs, otherprocs->name, NULL);
}
snprintf(vbuff, CF_MAXVARSIZE, "%s/state/cf_rootprocs", CFWORKDIR);
RawSaveItemList(rootprocs, vbuff);
DeleteItemList(rootprocs);
snprintf(vbuff, CF_MAXVARSIZE, "%s/state/cf_otherprocs", CFWORKDIR);
RawSaveItemList(otherprocs, vbuff);
DeleteItemList(otherprocs);
return true;
}
开发者ID:zined,项目名称:core,代码行数:86,代码来源:processes_select.c
示例17: GetExecOutput
bool GetExecOutput(const char *command, char *buffer, bool useshell)
/* Buffer initially contains whole exec string */
{
int offset = 0;
char line[CF_EXPANDSIZE];
FILE *pp;
CfDebug("GetExecOutput(%s,%s) - use shell = %d\n", command, buffer, useshell);
if (useshell)
{
pp = cf_popen_sh(command, "r");
}
else
{
pp = cf_popen(command, "r", true);
}
if (pp == NULL)
{
CfOut(OUTPUT_LEVEL_ERROR, "cf_popen", "Couldn't open pipe to command %s\n", command);
return false;
}
memset(buffer, 0, CF_EXPANDSIZE);
for (;;)
{
ssize_t res = CfReadLine(line, CF_EXPANDSIZE, pp);
if (res == 0)
{
break;
}
if (res == -1)
{
CfOut(OUTPUT_LEVEL_ERROR, "fread", "Unable to read output of command %s", command);
cf_pclose(pp);
return false;
}
if (strlen(line) + offset > CF_EXPANDSIZE - 10)
{
CfOut(OUTPUT_LEVEL_ERROR, "", "Buffer exceeded %d bytes in exec %s\n", CF_EXPANDSIZE, command);
break;
}
snprintf(buffer + offset, CF_EXPANDSIZE, "%s\n", line);
offset += strlen(line) + 1;
}
if (offset > 0)
{
if (Chop(buffer, CF_EXPANDSIZE) == -1)
{
CfOut(OUTPUT_LEVEL_ERROR, "", "Chop was called on a string that seemed to have no terminator");
}
}
CfDebug("GetExecOutput got: [%s]\n", buffer);
cf_pclose(pp);
return true;
}
开发者ID:rpoyner,项目名称:core,代码行数:65,代码来源:exec_tools.c
示例18: LocalExec
//.........这里部分代码省略.........
fclose(fp);
return;
}
CfOut(cf_verbose, "", " -> Command is executing...%s\n", esc_command);
while (!feof(pp))
{
if(!IsReadReady(fileno(pp), (config->agent_expireafter * SECONDS_PER_MINUTE)))
{
char errmsg[CF_MAXVARSIZE];
snprintf(errmsg, sizeof(errmsg), "cf-execd: !! Timeout waiting for output from agent (agent_expireafter=%d) - terminating it",
config->agent_expireafter);
CfOut(cf_error, "", "%s", errmsg);
fprintf(fp, "%s\n", errmsg);
count++;
pid_t pid_agent;
if(PipeToPid(&pid_agent, pp))
{
ProcessSignalTerminate(pid_agent);
}
else
{
CfOut(cf_error, "", "!! Could not get PID of agent");
}
break;
}
{
ssize_t num_read = CfReadLine(line, CF_BUFSIZE, pp);
if (num_read == -1)
{
FatalError("Cannot continue on CfReadLine error");
}
else if (num_read == 0)
{
break;
}
}
if(!CfReadLine(line, CF_BUFSIZE, pp))
{
break;
}
if (ferror(pp))
{
fflush(pp);
break;
}
print = false;
for (sp = line; *sp != '\0'; sp++)
{
if (!isspace((int) *sp))
{
print = true;
break;
}
}
开发者ID:FraserMCampbell,项目名称:core,代码行数:66,代码来源:cf-execd-runner.c
示例19: GetLMSensors
static bool GetLMSensors(double *cf_this)
{
FILE *pp;
Item *ip, *list = NULL;
double temp = 0;
char name[CF_BUFSIZE];
int count;
cf_this[ob_temp0] = 0.0;
cf_this[ob_temp1] = 0.0;
cf_this[ob_temp2] = 0.0;
cf_this[ob_temp3] = 0.0;
if ((pp = cf_popen("/usr/bin/sensors", "r", true)) == NULL)
{
LMSENSORS = false; /* Broken */
return false;
}
{
size_t vbuff_size = CF_BUFSIZE;
char *vbuff = xmalloc(vbuff_size);
ssize_t res = CfReadLine(&vbuff, &vbuff_size, pp);
if (res <= 0)
{
/* FIXME: do we need to log anything here? */
cf_pclose(pp);
free(vbuff);
return false;
}
for (;;)
{
ssize_t res = CfReadLine(&vbuff, &vbuff_size, pp);
if (res == -1)
{
if (!feof(pp))
{
/* FIXME: Do we need to log anything here? */
cf_pclose(pp);
free(vbuff);
return false;
}
else
{
break;
}
}
if (strstr(vbuff, "Temp") || strstr(vbuff, "temp"))
{
PrependItem(&list, vbuff, NULL);
}
}
cf_pclose(pp);
free(vbuff);
}
if (ListLen(list) > 0)
{
Log(LOG_LEVEL_DEBUG, "LM Sensors seemed to return ok data");
}
else
{
return false;
}
/* lmsensor names are hopelessly inconsistent - so try a few things */
for (ip = list; ip != NULL; ip = ip->next)
{
for (count = 0; count < 4; count++)
{
snprintf(name, 16, "CPU%d Temp:", count);
if (strncmp(ip->name, name, strlen(name)) == 0)
{
sscanf(ip->name, "%*[^:]: %lf", &temp);
switch (count)
{
case 0:
cf_this[ob_temp0] = temp;
break;
case 1:
cf_this[ob_temp1] = temp;
break;
case 2:
cf_this[ob_temp2] = temp;
break;
case 3:
cf_this[ob_temp3] = temp;
break;
}
Log(LOG_LEVEL_DEBUG, "Set temp%d to %lf from what looks like cpu temperature", count, temp);
}
}
//.........这里部分代码省略.........
开发者ID:AsherBond,项目名称:core,代码行数:101,代码来源:mon_temp.c
示例20: LoadFileAsItemList
int LoadFileAsItemList(Item **liststart, const char *file, EditDefaults edits)
{
{
struct stat statbuf;
if (stat(file, &statbuf) == -1)
{
Log(LOG_LEVEL_VERBOSE, "The proposed file '%s' could not be loaded. (stat: %s)", file, GetErrorStr());
return false;
}
if (edits.maxfilesize != 0 && statbuf.st_size > edits.maxfilesize)
{
Log(LOG_LEVEL_INFO, "File '%s' is bigger than the limit edit.max_file_size = %jd > %d bytes", file,
(intmax_t) statbuf.st_size, edits.maxfilesize);
return (false);
}
if (!S_ISREG(statbuf.st_mode))
{
Log(LOG_LEVEL_INFO, "%s is not a plain file", file);
return false;
}
}
FILE *fp = safe_fopen(file, "r");
if (!fp)
{
Log(LOG_LEVEL_INFO, "Couldn't read file '%s' for editing. (fopen: %s)", file, GetErrorStr());
return false;
}
Buffer *concat = BufferNew();
size_t line_size = CF_BUFSIZE;
char *line = xmalloc(line_size);
bool result = true;
for (;;)
{
ssize_t num_read = CfReadLine(&line, &line_size, fp);
if (num_read == -1)
{
if (!feof(fp))
{
Log(LOG_LEVEL_ERR,
"Unable to read contents of '%s'. (fread: %s)",
file, GetErrorStr());
result = false;
}
break;
}
if (edits.joinlines && *(line + strlen(line) - 1) == '\\')
{
*(line + strlen(line) - 1) = '\0';
BufferAppend(concat, line, num_read);
}
else
{
BufferAppend(concat, line, num_read);
if (!feof(fp) || (BufferSize(concat) > 0))
{
AppendItem(liststart, BufferData(concat), NULL);
}
}
BufferZero(concat);
}
free(line);
BufferDestroy(concat);
fclose(fp);
return result;
}
开发者ID:rcorrieri,项目名称:core,代码行数:75,代码来源:files_lib.c
注:本文中的CfReadLine函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论