本文整理汇总了C++中MyString::readLine方法的典型用法代码示例。如果您正苦于以下问题:C++ MyString::readLine方法的具体用法?C++ MyString::readLine怎么用?C++ MyString::readLine使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MyString
的用法示例。
在下文中一共展示了MyString::readLine方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: findPrevDelimiter
// Given an offset count that points to a delimiter, this function returns the
// previous delimiter offset position.
// If clusterId and procId is specified, it will not return the immediately
// previous delimiter, but the nearest previous delimiter that matches
static long findPrevDelimiter(FILE *fd, char* filename, long currOffset)
{
MyString buf;
char *owner;
long prevOffset = -1, completionDate = -1;
int clusterId = -1, procId = -1;
fseek(fd, currOffset, SEEK_SET);
buf.readLine(fd);
owner = (char *) malloc(buf.Length() * sizeof(char));
// Current format of the delimiter:
// *** ProcId = a ClusterId = b Owner = "cde" CompletionDate = f
// For the moment, owner and completionDate are just parsed in, reserved for future functionalities.
sscanf(buf.Value(), "%*s %*s %*s %ld %*s %*s %d %*s %*s %d %*s %*s %s %*s %*s %ld",
&prevOffset, &clusterId, &procId, owner, &completionDate);
if (prevOffset == -1 && clusterId == -1 && procId == -1) {
fprintf(stderr,
"Error: (%s) is an incompatible history file, please run condor_convert_history.\n",
filename);
free(owner);
exit(1);
}
// If clusterId.procId is specified
if (cluster != -1 || proc != -1) {
// Ok if only clusterId specified
while (clusterId != cluster || (proc != -1 && procId != proc)) {
if (prevOffset == 0) { // no match
free(owner);
return -1;
}
// Find previous delimiter + summary
fseek(fd, prevOffset, SEEK_SET);
buf.readLine(fd);
owner = (char *) realloc (owner, buf.Length() * sizeof(char));
sscanf(buf.Value(), "%*s %*s %*s %ld %*s %*s %d %*s %*s %d %*s %*s %s %*s %*s %ld",
&prevOffset, &clusterId, &procId, owner, &completionDate);
}
}
free(owner);
return prevOffset;
}
示例2: boot
// This is a blocking call and must provide a fully booted partition when it
// returns. Otherwise, this partition could be overcommitted given the
// nature of the use of this call.
// script partition_name size kind
void Partition::boot(char *script, PKind pkind)
{
FILE *fin = NULL;
ArgList args;
MyString line;
priv_state priv;
// we're told what kind of partition this is going to be
set_pkind(pkind);
dprintf(D_ALWAYS, "\t%s %s %ld %s\n",
script,
get_name().Value(),
get_size(),
pkind_xlate(get_pkind()).Value());
args.AppendArg(script);
args.AppendArg(get_name());
args.AppendArg(get_size());
args.AppendArg(pkind_xlate(get_pkind()).Value());
priv = set_root_priv();
fin = my_popen(args, "r", MY_POPEN_OPT_WANT_STDERR);
line.readLine(fin); // read back OK or NOT_OK, XXX ignore
my_pclose(fin);
set_priv(priv);
// Now that the script is done, mark it booted.
set_pstate(BOOTED);
}
示例3:
bool
privsep_get_switchboard_response(FILE* err_fp, MyString *response)
{
// first read everything off the error pipe and close
// the error pipe
//
MyString err;
while (err.readLine(err_fp, true)) { }
fclose(err_fp);
// if this is passed in, assume the caller will handle any
// error propagation, and we just succeed.
if (response) {
*response = err;
return true;
}
// if there was something there, print it out here (since no one captured
// the error message) and return false to indicate something went wrong.
if (err.Length() != 0) {
dprintf(D_ALWAYS,
"privsep_get_switchboard_response: error received: %s",
err.Value());
return false;
}
// otherwise, indicate that everything's fine
//
return true;
}
示例4: back
void Partition::back(char *script)
{
FILE *fin = NULL;
ArgList args;
MyString line;
priv_state priv;
dprintf(D_ALWAYS, "\t%s %s %ld %s\n",
script,
get_name().Value(),
get_size(),
pkind_xlate(get_pkind()).Value());
args.AppendArg(script);
args.AppendArg(get_name());
args.AppendArg(get_size());
args.AppendArg(pkind_xlate(get_pkind()).Value());
priv = set_root_priv();
fin = my_popen(args, "r", MY_POPEN_OPT_WANT_STDERR);
line.readLine(fin); // read back OK or NOT_OK, XXX ignore
my_pclose(fin);
set_priv(priv);
// we don't know it is backed until the
// STARTD_FACTORY_SCRIPT_AVAILABLE_PARTITIONS
// tells us it is actually backed. This prevents overcommit of a
// partition to multiple startds.
set_pstate(ASSIGNED);
}
示例5: findLastDelimiter
// Given a history file, returns the position offset of the last delimiter
// The last delimiter will be found in the last line of file,
// and will start with the "***" character string
static long findLastDelimiter(FILE *fd, char *filename)
{
int i;
bool found;
long seekOffset, lastOffset;
MyString buf;
struct stat st;
// Get file size
stat(filename, &st);
found = false;
i = 0;
while (!found) {
// 200 is arbitrary, but it works well in practice
seekOffset = st.st_size - (++i * 200);
fseek(fd, seekOffset, SEEK_SET);
while (1) {
if (buf.readLine(fd) == false)
break;
// If line starts with *** and its last line of file
if (strncmp(buf.Value(), "***", 3) == 0 && buf.readLine(fd) == false) {
found = true;
break;
}
}
if (seekOffset <= 0) {
fprintf(stderr, "Error: Unable to find last delimiter in file: (%s)\n", filename);
exit(1);
}
}
// lastOffset = beginning of delimiter
lastOffset = ftell(fd) - buf.Length();
return lastOffset;
}
示例6: getWritePassword
//! Gets the writer password required by the quill++
// daemon to access the database
static MyString getWritePassword(const char *write_passwd_fname,
const char *host, const char *port,
const char *db,
const char *dbuser) {
FILE *fp = NULL;
MyString passwd;
int len;
MyString prefix;
MyString msbuf;
const char *buf;
bool found = FALSE;
// prefix is for the prefix of the entry in the .pgpass
// it is in the format of the following:
// host:port:db:user:password
prefix.sprintf("%s:%s:%s:%s:", host, port, db, dbuser);
len = prefix.Length();
fp = safe_fopen_wrapper(write_passwd_fname, "r");
if(fp == NULL) {
EXCEPT("Unable to open password file %s\n", write_passwd_fname);
}
//dprintf(D_ALWAYS, "prefix: %s\n", prefix);
while(msbuf.readLine(fp)) {
msbuf.chomp();
buf = msbuf.Value();
//fprintf(stderr, "line: %s\n", buf);
// check if the entry matches the prefix
if (strncmp(buf, prefix.Value(), len) == 0) {
// extract the password
passwd = msbuf.Substr(len, msbuf.Length());
found = TRUE;
break;
}
}
fclose(fp);
if (!found) {
EXCEPT("Unable to find password from file %s\n", write_passwd_fname);
}
return passwd;
}
示例7: param
bool
write_local_settings_from_file(FILE* out_fp,
const char* param_name,
const char* start_mark,
const char* end_mark)
{
char* tmp = param(param_name);
if (tmp == NULL) {
return true;
}
MyString local_settings_file = tmp;
free(tmp);
if (start_mark != NULL) {
if (fprintf(out_fp, "%s\n", start_mark) < 0) {
vmprintf(D_ALWAYS,
"fprintf error writing start marker: %s\n",
strerror(errno));
return false;
}
}
FILE* in_fp = safe_fopen_wrapper_follow(local_settings_file.Value(), "r");
if (in_fp == NULL) {
vmprintf(D_ALWAYS,
"fopen error on %s: %s\n",
local_settings_file.Value(),
strerror(errno));
return false;
}
MyString line;
while (line.readLine(in_fp)) {
if (fputs(line.Value(), out_fp) == EOF) {
vmprintf(D_ALWAYS,
"fputs error copying local settings: %s\n",
strerror(errno));
fclose(in_fp);
return false;
}
}
fclose(in_fp);
if (end_mark != NULL) {
if (fprintf(out_fp, "%s\n", end_mark) == EOF) {
vmprintf(D_ALWAYS,
"fputs error writing end marker: %s\n",
strerror(errno));
return false;
}
}
return true;
}
示例8:
int
GLExecPrivSepHelper::run_script(ArgList& args,MyString &error_desc)
{
if (!proxy_valid_right_now()) {
dprintf(D_ALWAYS, "GLExecPrivSepHelper::run_script: not invoking glexec since the proxy is not valid!\n");
error_desc += "The job proxy is not valid.";
return INVALID_PROXY_RC;
}
/* Note that set_user_priv is a no-op if condor is running as
non-root (the "usual" mode for invoking glexec) */
priv_state priv_saved = set_user_priv();
FILE* fp = my_popen(args, "r", TRUE);
set_priv(priv_saved);
if (fp == NULL) {
dprintf(D_ALWAYS,
"GLExecPrivSepHelper::run_script: "
"my_popen failure on %s: errno=%d (%s)\n",
args.GetArg(0),
errno,
strerror(errno));
return -1;
}
MyString str;
while (str.readLine(fp, true));
priv_saved = set_user_priv();
int ret = my_pclose(fp);
set_priv(priv_saved);
if (ret != 0) {
str.trim();
dprintf(D_ALWAYS,
"GLExecPrivSepHelper::run_script: %s exited "
"with status %d and following output:\n%s\n",
args.GetArg(0),
ret,
str.Value());
error_desc.formatstr_cat("%s exited with status %d and the following output: %s",
condor_basename(args.GetArg(0)),
ret,
str.Value());
error_desc.replaceString("\n","; ");
}
return ret;
}
示例9: MAX
//---------------------------------------------------------------------------
// Here we re-read the jobstate.log file to find out what sequence number
// we should start with when running a rescue DAG.
void
JobstateLog::InitializeRescue()
{
debug_printf( DEBUG_DEBUG_2, "JobstateLog::InitializeRescue()\n" );
if ( !_jobstateLogFile ) {
return;
}
FILE *infile = safe_fopen_wrapper_follow( _jobstateLogFile, "r" );
if ( !infile ) {
// This is a fatal error, because by the time we get here,
// we should, at the very least, have written the
// DAGMAN_STARTED "event".
debug_printf( DEBUG_QUIET,
"Could not open jobstate log file %s for reading.\n",
_jobstateLogFile );
main_shutdown_graceful();
return;
}
int maxSeqNum = 0;
MyString line;
while ( line.readLine( infile ) ) {
time_t newTimestamp;
MyString nodeName;
int seqNum;
if ( ParseLine( line, newTimestamp, nodeName, seqNum ) ) {
maxSeqNum = MAX( maxSeqNum, seqNum );
}
}
fclose( infile );
debug_printf( DEBUG_DEBUG_2,
"Max sequence num in jobstate.log file: %d\n", maxSeqNum );
Job::SetJobstateNextSequenceNum( maxSeqNum + 1 );
}
示例10: dprintf
bool
UserProc::JobReaper(int pid, int status)
{
MyString line;
MyString error_txt;
MyString filename;
const char* dir = Starter->GetWorkingDir();
FILE* fp;
dprintf( D_FULLDEBUG, "Inside UserProc::JobReaper()\n" );
filename.sprintf("%s%c%s", dir, DIR_DELIM_CHAR, JOB_WRAPPER_FAILURE_FILE);
if (0 == access(filename.Value(), F_OK)) {
// The job wrapper failed, so read the contents of the file
// and EXCEPT, just as is done when an executable is unable
// to be run. Ideally, both failure cases would propagate
// into the job ad
fp = safe_fopen_wrapper_follow(filename.Value(), "r");
if (!fp) {
dprintf(D_ALWAYS, "Unable to open \"%s\" for reading: "
"%s (errno %d)\n", filename.Value(),
strerror(errno), errno);
} else {
while (line.readLine(fp))
{
error_txt += line;
}
fclose(fp);
}
error_txt.trim();
EXCEPT("The job wrapper failed to execute the job: %s", error_txt.Value());
}
if (JobPid == pid) {
m_proc_exited = true;
exit_status = status;
job_exit_time.getTime();
}
return m_proc_exited;
}
示例11: shutdown
// This is a blocking call and must provide a fully shutdown partition when it
// returns.
// script partition_name
void Partition::shutdown(char *script)
{
FILE *fin = NULL;
ArgList args;
MyString line;
priv_state priv;
dprintf(D_ALWAYS, "\t%s %s\n",
script,
get_name().Value());
args.AppendArg(script);
args.AppendArg(get_name());
priv = set_root_priv();
fin = my_popen(args, "r", MY_POPEN_OPT_WANT_STDERR);
line.readLine(fin); // read back OK or NOT_OK, XXX ignore
my_pclose(fin);
set_priv(priv);
// Now that the script is done, mark it simply generated.
set_pstate(GENERATED);
}
示例12: while
bool
privsep_get_switchboard_response(FILE* err_fp)
{
// first read everything off the error pipe and close
// the error pipe
//
MyString err;
while (err.readLine(err_fp, true)) { }
fclose(err_fp);
// if there was something there, print it out and return
// an indication that something went wrong
//
if (err.Length() != 0) {
dprintf(D_ALWAYS,
"privsep_get_switchboard_response: error received: %s",
err.Value());
return false;
}
// otherwise, indicate that everything's fine
//
return true;
}
示例13: check_if_docker_offline
static int check_if_docker_offline(MyPopenTimer & pgmIn, const char * cmd_str, int original_error_code)
{
int rval = original_error_code;
// this should not be called with a program that is still running.
ASSERT(pgmIn.is_closed());
MyString line;
MyStringCharSource * src = NULL;
if (pgmIn.output_size() > 0) {
src = &pgmIn.output();
src->rewind();
}
bool check_for_hung_docker = true; // if no output, we should check for hung docker.
dprintf( D_ALWAYS | D_FAILURE, "%s failed, %s output.\n", cmd_str, src ? "printing first few lines of" : "no" );
if (src) {
check_for_hung_docker = false; // if we got output, assume docker is not hung.
for (int ii = 0; ii < 10; ++ii) {
if ( ! line.readLine(*src, false)) break;
dprintf( D_ALWAYS | D_FAILURE, "%s\n", line.c_str() );
// if we got something resembling "/var/run/docker.sock: resource temporarily unavaible"
// then we should check for a hung docker.
const char * p = strstr(line.c_str(), ".sock: resource ");
if (p && strstr(p, "unavailable")) {
check_for_hung_docker = true;
}
}
}
if (check_for_hung_docker) {
dprintf( D_ALWAYS, "Checking to see if Docker is offline\n");
ArgList infoArgs;
add_docker_arg(infoArgs);
infoArgs.AppendArg( "info" );
MyString displayString;
infoArgs.GetArgsStringForLogging( & displayString );
MyPopenTimer pgm2;
if (pgm2.start_program(infoArgs, true, NULL, false) < 0) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to run '%s'.\n", displayString.c_str() );
rval = DockerAPI::docker_hung;
} else {
int exitCode = 0;
if ( ! pgm2.wait_for_exit(60, &exitCode) || pgm2.output_size() <= 0) {
dprintf( D_ALWAYS | D_FAILURE, "Failed to get output from '%s' : %s.\n", displayString.c_str(), pgm2.error_str() );
rval = DockerAPI::docker_hung;
} else {
while (line.readLine(pgm2.output(),false)) {
line.chomp();
dprintf( D_FULLDEBUG, "[Docker Info] %s\n", line.c_str() );
}
}
}
if (rval == DockerAPI::docker_hung) {
dprintf( D_ALWAYS | D_FAILURE, "Docker is not responding. returning docker_hung error code.\n");
}
}
return rval;
}
示例14: ASSERT
ClassAd*
readJobAd( void )
{
ClassAd* ad = NULL;
bool is_stdin = false;
bool read_something = false;
ASSERT( job_ad_file );
if( job_ad_file[0] == '-' && job_ad_file[1] == '\0' ) {
fp = stdin;
is_stdin = true;
} else {
if (fp == NULL) {
fp = safe_fopen_wrapper_follow( job_ad_file, "r" );
if( ! fp ) {
EXCEPT( "Failed to open ClassAd file (%s): %s (errno %d)",
job_ad_file, strerror(errno), errno );
}
}
}
dprintf( D_FULLDEBUG, "Reading job ClassAd from %s\n",
is_stdin ? "STDIN" : job_ad_file );
ad = new ClassAd;
MyString line;
while( line.readLine(fp) ) {
read_something = true;
line.chomp();
if( line[0] == '#' ) {
dprintf( D_JOB, "IGNORING COMMENT: %s\n", line.Value() );
continue;
}
if( line == "***" ) {
dprintf( D_JOB, "Saw ClassAd delimitor, stopping\n" );
break;
}
if( ! ad->Insert(line.Value()) ) {
EXCEPT( "Failed to insert \"%s\" into ClassAd!", line.Value() );
}
}
if( ! read_something ) {
EXCEPT( "reading ClassAd from (%s): file is empty",
is_stdin ? "STDIN" : job_ad_file );
}
if( IsDebugVerbose(D_JOB) ) {
ad->dPrint( D_JOB );
}
// For debugging, see if there's a special attribute in the
// job ad that sends us into an infinite loop, waiting for
// someone to attach with a debugger
int shadow_should_wait = 0;
ad->LookupInteger( ATTR_SHADOW_WAIT_FOR_DEBUG,
shadow_should_wait );
if( shadow_should_wait ) {
dprintf( D_ALWAYS, "Job requested shadow should wait for "
"debugger with %s=%d, going into infinite loop\n",
ATTR_SHADOW_WAIT_FOR_DEBUG, shadow_should_wait );
while( shadow_should_wait ) { }
}
return ad;
}
示例15: fields
int
main( int argc, char* argv[] )
{
int i;
param_functions *p_funcs = NULL;
set_mySubSystem( "DAEMON-TOOL", SUBSYSTEM_TYPE_TOOL );
MyName = argv[0];
myDistro->Init( argc, argv );
FILE *input_fp = stdin;
for( i=1; i<argc; i++ ) {
if( match_prefix( argv[i], "-daemontype" ) ) {
if( argv[i + 1] ) {
get_mySubSystem()->setName( argv[++i] );
get_mySubSystem()->setTypeFromName( );
} else {
usage();
}
} else if( match_prefix( argv[i], "-debug" ) ) {
// dprintf to console
Termlog = 1;
p_funcs = get_param_functions();
dprintf_config( "DAEMON-TOOL", p_funcs );
set_debug_flags(NULL, D_FULLDEBUG|D_SECURITY);
} else if( match_prefix( argv[i], "-" ) ) {
usage();
} else {
usage();
}
}
// If we didn't get told what subsystem we should use, set it
// to "TOOL".
if( !get_mySubSystem()->isNameValid() ) {
get_mySubSystem()->setName( "DAEMON-TOOL" );
}
config( 0, true );
IpVerify ipverify;
MyString line;
while( line.readLine(input_fp) ) {
line.chomp();
if( line.IsEmpty() || line[0] == '#' ) {
printf("%s\n",line.Value());
continue;
}
StringList fields(line.Value()," ");
fields.rewind();
char const *perm_str = fields.next();
char const *fqu = fields.next();
char const *ip = fields.next();
char const *expected = fields.next();
MyString sin_str = generate_sinful(ip, 0);
condor_sockaddr addr;
if( !addr.from_sinful(sin_str) ) {
fprintf(stderr,"Invalid ip address: %s\n",ip);
exit(1);
}
DCpermission perm = StringToDCpermission(perm_str);
if( perm == LAST_PERM ) {
fprintf(stderr,"Invalid permission level: %s\n",perm_str);
exit(1);
}
if( strcmp(fqu,"*") == 0 ) {
fqu = "";
}
char const *result;
MyString reason;
if( ipverify.Verify(perm,addr,fqu,&reason,&reason) != USER_AUTH_SUCCESS ) {
result = "DENIED";
}
else {
result = "ALLOWED";
}
if( expected && strcasecmp(expected,result) != 0 ) {
printf("Got wrong result '%s' for '%s': reason: %s!\n",
result,line.Value(),reason.Value());
printf("Aborting.\n");
exit(1);
}
if( expected ) {
printf("%s\n",line.Value());
}
else {
printf("%s %s\n",line.Value(),result);
}
//.........这里部分代码省略.........