Ejemplo n.º 1
0
Archivo: sf.c Proyecto: heuripedes/sf
static void open_file() {

    if (file)
        return;

    if (!file_name[0] && !guess_filename()) {
        die("could not determine the filename, consider using the -o option.\n");
    }

    file = fopen(file_name, "wb+");

    if (!file)
        die("failed to open '%s': %s\n", file_name, strerror(errno));

    if (file_size) {
        int fd  = fileno(file);
        int err;

        if ((err = posix_fallocate(fd, 0, file_size))) {
            warn("failed to preallocate '%s': %s\n", file_name, strerror(err));
        }

        if ((err = posix_fadvise(fd, 0, file_size, POSIX_FADV_RANDOM))) {
            warn("failed to set '%s's access policy: %s\n", file_name, strerror(err));
        }
    }
}
Ejemplo n.º 2
0
packet_t *parse_next_file(FILE *input)
{
    uint8_t word[4];
    packet_t *packet;
    static FILE *last_input;

    if(input != last_input) {
        last_input = input;
        UNKNOWN_COUNT = 0;
    }

    packet = malloc(sizeof(packet_t));

    /* consume input until FILE_SEPARATOR has been found */
    while(fread(word, sizeof(word), 1, input)) {
        if (memcmp(word, FILE_SEPARATOR, sizeof(word)) == 0) {
            break;
        }
    }

    if(feof(input)) {
        return NULL;
    }

    /* start read of fixed sized header (94 bytes long) */
    fread(&packet->header.header_length, sizeof(packet->header.header_length), 1, input);
    fread(&packet->header.one_value, sizeof(packet->header.one_value), 1, input);
    fread(packet->header.hardware_id, sizeof(packet->header.hardware_id), 1, input);
    fread(&packet->header.file_sequence, sizeof(packet->header.file_sequence), 1, input);
    fread(&packet->header.data_file_length, sizeof(packet->header.data_file_length), 1, input);
    fread(packet->header.date, sizeof(packet->header.date), 1, input);
    fread(packet->header.time, sizeof(packet->header.time), 1, input);
    fread(packet->header.input_word, sizeof(packet->header.input_word), 1, input);
    fread(packet->header.blank, sizeof(packet->header.blank), 1, input);
    fread(packet->header.header_crc, 1, 2, input);
    fread(&packet->header.one_value2, sizeof(packet->header.one_value2), 1, input);
    fread(&packet->header.blank2, sizeof(packet->header.blank2), 1, input);

    /* start read of variable sized CRC & data */
    packet->crc_length = packet->header.header_length - 98;
    packet->crc = malloc(packet->crc_length);
    fread(packet->crc, 1, packet->crc_length, input);
    packet->file_data = malloc(packet->header.data_file_length);
    fread(packet->file_data, 1, packet->header.data_file_length, input);
    packet->filename = (char*)guess_filename(packet->header.file_sequence);

    /* seek file up to next 4-byte boundary alignment */
    fseek_align4(input);

    /* test for crc ok */
    packet->is_crc_ok = crc_are_equal(new_crc_t(packet->crc, packet->crc_length), crc16(packet->file_data, packet->header.data_file_length));

    return packet;
}
Ejemplo n.º 3
0
int read_mpstat(struct trace *trace, char *trace_name)
{
	int fd;
	struct stat st;
	int ret;
	char *p;

	if (record_header_len == 0) {
		record_header_len = strlen(record_header);
	}

	snprintf(line, line_len, "%s.mpstat", guess_filename(trace_name));
	fd = open(line, O_RDONLY);
	if (fd < 0)
		return 0;

	ret = fstat(fd, &st);
	if (ret < 0) {
		fprintf(stderr, "stat failed on %s err %s\n", line, strerror(errno));
		goto fail_fd;
	}
	p = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
	if (p == MAP_FAILED) {
		fprintf(stderr, "Unable to mmap trace file %s, err %s\n", line, strerror(errno));
		goto fail_fd;
	}
	trace->mpstat_start = p;
	trace->mpstat_len = st.st_size;
	trace->mpstat_cur = p;
	trace->mpstat_fd = fd;
	find_last_mpstat_time(trace);
	count_mpstat_cpus(trace);

	first_mpstat(trace);

	return 0;

fail_fd:
	close(fd);
	return 0;
}