I/O module to assist with consuming data from files
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);
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);
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);
Frees all memory used by get_lines()
void del_lines(char **lines);
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);
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"
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);
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);