input
I/O module to assist with consuming data from files
Functions
get_binary
Reads a file at path
and returns the contents as a char* buffer. The fsz
parameter stores the length of the
returned array. The buffer is allocated inside the function, so the user is responsible for freeing it when finished.
char *get_binary(const char *path, size_t *fsz);
/* Usage */
size_t fsz = 0;
char *buf = get_binary("/home/evan/binfile", &fsz);
free(buf);
get_input
Reads a file at path
and returns the contents as a single string. The string is allocated inside the function and
the user is responsible for freeing it when finished.
unsigned char *get_input(const char *path);
/* Usage */
char *str = get_input("/home/evan/textfile");
free(str);
get_lines
Reads a file at path
and returns the contents as an array of strings. The newline character \n
is used as the
delimiter to determine where the file is split. The user is responsible for cleaning up the memory using del_lines()
.
lsz
is set to the number of lines in the array.
char **get_lines(const char *path, size_t *lsz);
/* Usage */
size_t sz = 0;
char **lines = get_lines("/home/evan/textfile", &sz);
for (size_t i = 0; i < sz; i++) {
printf("%s\n", lines[i]);
}
del_lines(lines);
del_lines
Frees all memory used by get_lines()
void del_lines(char **lines);
get_ints
Reads a file at path
and returns the contents as an array of integers. The file is assumed to be a newline seperated
list of integers and nothing else.
The newline character \n
is used as the delimiter to determine where the file is split. The user is responsible for
cleaning up the memory using free()
. lsz
is set to the number of lines in the array.
int *get_ints(const char *path, size_t *lsz);
/* Usage */
int *nums = get_ints("/home/evan/intfile");
for (size_t i = 0; i < sz; i++) {
printf("%d\n", nums[i]);
}
free(nums);
split
Takes a string s
and splits it into an array of strings based on the delimiter. s
is left unchanged. The user is
responsible for cleaning up the memory of the split using del_split()
. sp_sz
is set to the size of the split.
char **split(char *s, size_t *lsz, const char *delim)
/* Usage */
size_t sp_sz = 0;
char **sp = split("Split on whitespace", &sp_sz, " ");
printf("%s\n", sp[0]); // Prints "Split"
del_split
Frees all memory used by split()
. Just like split
, it does not touch the original string.
void del_split(char **sp);
/* Usage */
size_t sp_sz = 0;
char **sp = split("Delete Me!", &sp_sz, " ");
void del_split(sp);
capture_system
Runs a command on the system shell and returns stdout as a string. buffsize
is the size of
the returned buffer that holds stdout
. Passing 0
to buffsize
will use the default buffer size of 1024
.
User is responsible for freeing the returned string.
const char *capture_system(const char *cmd, int buffsize);
/* Usage */
const char *cap = capture_system("ls $HOME", 0);
printf("%s\n", cap);
free(cap);