summaryrefslogtreecommitdiff
path: root/os.h
diff options
context:
space:
mode:
Diffstat (limited to 'os.h')
-rw-r--r--os.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/os.h b/os.h
index ebf0317..4e49057 100644
--- a/os.h
+++ b/os.h
@@ -1,3 +1,4 @@
+// a bunch of OS-dependent functions
#ifndef OS_H_
#define OS_H_
@@ -75,5 +76,50 @@ static void time_sleep_s(u64 s) {
}
+typedef struct Process Process;
+
+// zero everything except what you're using
+typedef struct {
+ bool stdin_blocking;
+ bool stdout_blocking;
+ bool separate_stderr;
+ bool stderr_blocking; // not applicable if separate_stderr is false.
+ const char *working_directory;
+} ProcessSettings;
+
+// get process ID of this process
+int process_get_id(void);
+// execute the given command (like if it was passed to system()).
+// returns false on failure
+bool process_run_ex(Process *proc, const char *command, const ProcessSettings *props);
+// like process_run_ex, but with the default settings
+bool process_run(Process *process, char const *command);
+// returns the error last error produced, or NULL if there was no error.
+char const *process_geterr(Process *process);
+// write to stdin
+// returns:
+// -2 on error
+// or a non-negative number indicating the number of bytes written.
+long long process_write(Process *process, const char *data, size_t size);
+// read from stdout+stderr
+// returns:
+// -2 on error
+// -1 if no data is available right now
+// 0 on end of file
+// or a positive number indicating the number of bytes read to data (at most size)
+long long process_read(Process *process, char *data, size_t size);
+// like process_read, but reads stderr.
+// this function ALWAYS RETURNS -2 if separate_stderr is not specified in the ProcessSettings.
+// if separate_stderr is false, then both stdout and stderr will be sent via process_read.
+long long process_read_stderr(Process *process, char *data, size_t size);
+// Checks if the process has exited. Returns:
+// -1 if the process returned a non-zero exit code, or got a signal.
+// 1 if the process exited successfully
+// 0 if the process hasn't exited.
+// If message is not NULL, it will be set to a description of what happened (e.g. "exited successfully")
+int process_check_status(Process *process, char *message, size_t message_size);
+// kills process if still running
+void process_kill(Process *process);
+
#endif // OS_H_