コード例 #1
0
ファイル: copy_stream.c プロジェクト: LydiaBrothers/cctools
int64_t copy_stream_to_buffer(FILE *input, char **buffer, size_t *len)
{
	size_t _len;
	if (len == NULL)
		len = &_len;

	int64_t total = 0;
	buffer_t B;
	buffer_init(&B);

	while(1) {
		char buffer[COPY_BUFFER_SIZE];

		int64_t actual_read = full_fread(input, buffer, COPY_BUFFER_SIZE);
		if(actual_read <= 0) {
			if (total == 0)
				return -1;
			else
				break;
		}

		if (buffer_putlstring(&B, buffer, actual_read) == -1) {
			buffer_free(&B);
			return -1;
		}

		total += actual_read;
	}

	buffer_dupl(&B, buffer, len);
	buffer_free(&B);

	return total;
}
コード例 #2
0
ファイル: rmonitor.c プロジェクト: NeilB879/cctools
//Using default sampling interval. We may want to add an option
//to change it.
char *resource_monitor_write_command(const char *monitor_path, const char *template_filename, const struct rmsummary *limits, const char *extra_monitor_options, int debug_output, int time_series, int inotify_stats)
{


	buffer_t cmd_builder;
	buffer_init(&cmd_builder);

	if(!monitor_path)
		fatal("Monitor path should be specified.");

	buffer_printf(&cmd_builder, "%s", monitor_path);
	buffer_printf(&cmd_builder, " --with-output-files=%s", template_filename);

	if(debug_output)
		buffer_printf(&cmd_builder, " -dall -o %s.debug", template_filename);

	if(time_series)
		buffer_printf(&cmd_builder, " --with-time-series");

	if(inotify_stats)
		buffer_printf(&cmd_builder, " --with-inotify");

	if(limits) {
		if(limits->end > -1)
			buffer_printf(&cmd_builder, " -L 'end: %lf'", limits->end/1000000e0);

		if(limits->wall_time > -1)
			buffer_printf(&cmd_builder, " -L 'wall_time: %lf'", limits->wall_time/1000000e0);

		if(limits->cpu_time > -1)
			buffer_printf(&cmd_builder, " -L 'cpu_time: %lf'", limits->cpu_time/1000000e0);

		if(limits->cores > -1)
			buffer_printf(&cmd_builder, " -L 'cores: %" PRId64 "'", limits->cores);

		if(limits->max_concurrent_processes > -1)
			buffer_printf(&cmd_builder, " -L 'max_concurrent_processes: %" PRId64 "'", limits->max_concurrent_processes);

		if(limits->total_processes > -1)
			buffer_printf(&cmd_builder, " -L 'total_processes: %" PRId64 "'", limits->total_processes);

		if(limits->virtual_memory > -1)
			buffer_printf(&cmd_builder, " -L 'virtual_memory: %" PRId64 "'", limits->virtual_memory);

		if(limits->memory > -1)
			buffer_printf(&cmd_builder, " -L 'memory: %" PRId64 "'", limits->memory);

		if(limits->swap_memory > -1)
			buffer_printf(&cmd_builder, " -L 'swap_memory: %" PRId64 "'", limits->swap_memory);

		if(limits->bytes_read > -1)
			buffer_printf(&cmd_builder, " -L 'bytes_read: %" PRId64 "'", limits->bytes_read);

		if(limits->bytes_written > -1)
			buffer_printf(&cmd_builder, " -L 'bytes_written: %" PRId64 "'", limits->bytes_written);

		if(limits->total_files > -1)
			buffer_printf(&cmd_builder, " -L 'total_files: %" PRId64 "'", limits->total_files);

		if(limits->disk > -1)
			buffer_printf(&cmd_builder, " -L 'disk: %" PRId64 "'", limits->disk);
	}

	if(extra_monitor_options)
		buffer_printf(&cmd_builder, " %s", extra_monitor_options);

	buffer_printf(&cmd_builder, " --sh []");

	char *result;
	buffer_dupl(&cmd_builder, &result, 0);
	buffer_free(&cmd_builder);

	return result;
}