MAT_VARREADNEXTINFO(3)
π MAT_VARREADNEXTINFO π
okay bestie, so this one lives in the Library Functions Manual section of your man pages (section 3, the library-call girlies π), and it's giving extremely useful if you're out here poking at MATLAB MAT files from C.
β¨ NAME β¨
Mat_VarReadNextInfo β reads the information for the next variable in a MATLAB MAT file. that's it, that's the whole job, and she does it flawlessly π
π¦ SYNOPSIS π¦
#include <matio.h>
matvar_t *
Mat_VarReadNextInfo(mat_t *matfp);
πΈ DESCRIPTION πΈ
so like, Mat_VarReadNextInfo() reads the info for the next variable stored in the open MAT file. that's the vibe. the file is already open (you did that part, bestie), and this function just peeks at what's next in line π
π RETURN VALUES π
if there's another variable in the MAT file and it gets read successfully, you get back a pointer to the MATLAB variable structure. iconic. π«Ά
if there are no more variables, or there was an error reading the variable, you get NULL. no cap. π
π EXAMPLES π
okay so this example program is literally the cutest thing β it opens a MAT file named by the first argument to the program, and uses Mat_VarReadNextInfo() to read the information about each variable in the file. and for every variable it reads, the name, size, and class get printed in a format similar to the MATLAB whos command. main character energy fr fr β¨
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "matio.h"
static char *mxclass[17] = {"cell", "struct", "object", "char", "sparse",
"double", "single", "int8", "uint8", "int16",
"uint16", "int32", "uint32", "int64", "uint64",
"function", "opaque"
};
int
main(int argc, char **argv)
{
mat_t *matfp;
matvar_t *matvar;
char size[32] = {' ',};
matfp = Mat_Open(argv[1], MAT_ACC_RDONLY);
if ( NULL == matfp ) {
fprintf(stderr, "Error opening MAT file %s0, argv[1]);
return EXIT_FAILURE;
}
printf("%-32s%-16s%-16s%-16s0, "Name", "Size", "Bytes", "Class");
while ( NULL != (matvar = Mat_VarReadNextInfo(matfp)) ) {
printf("%-32s", matvar->name);
if ( matvar->rank > 0 ) {
int cnt;
int i;
cnt = snprintf(size, sizeof(size), "%zd", matvar->dims[0]);
for ( i = 1; i < matvar->rank; i++ ) {
if ( ceil(log10((double)matvar->dims[i])) + 1 < 32 ) {
cnt += snprintf(size + cnt, sizeof(size) - cnt,
"x%zd", matvar->dims[i]);
if ( cnt >= sizeof(size) ) {
break;
}
}
}
printf("%-16s", size);
} else {
printf(" ");
}
snprintf(size, sizeof(size), "%zd", Mat_VarGetSize(matvar));
printf("%-16s", size);
printf("%-16s0, mxclass[matvar->class_type - 1]);
Mat_VarFree(matvar);
}
Mat_Close(matfp);
return EXIT_SUCCESS;
}
ngl bestie, notice thewhileloop just keeps callingMat_VarReadNextInfo(matfp)until it hands backNULLβ that's your "no more variables, we're done here" signal. and don't forgetMat_VarFree(matvar)on every single one, or you're gonna leak. we do not leak. periodt. π
π SEE ALSO π
and that's the whole page, bestie!! π this lil beauty is from Debian, dated March 4, 2024, and it's page MAT_VARREADNEXTINFO(3) β go read your MAT files, ily, bye πβ¨π
π¦ where this page comes from
- arch rolling: libmatio 1.5.30-1 Β· BSD-2-Clause
- fedora 44: matio-devel 1.5.30-2.fc44 Β· BSD-2-Clause
- fedora 44: matio-devel 1.5.30-2.fc44 Β· BSD-2-Clause
- nixpkgs unstable: matio 1.5.30
- ubuntu resolute: libmatio-doc 1.5.30-2 Β· BSD-2-Clause
- ubuntu stonking: libmatio-doc 1.5.30-4build1 Β· BSD-2-Clause
- Copyright (c) 2015-2026, The matio contributors
- Copyright (c) 2011-2014, Christopher C. Hulbert
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms