aboutsummaryrefslogtreecommitdiff
path: root/semestr-5/so/lista4/so21_lista_4/include/rio.h
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-11-13 17:32:03 +0100
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-11-13 17:32:03 +0100
commitff0ac5bf2b3069200d2bb5a56bc3eef0b4bcb44a (patch)
tree6778fd6eb8fb48cff51564d4110ed3bd168a3b2e /semestr-5/so/lista4/so21_lista_4/include/rio.h
parentfa505e1e8d7f990d608144ccd97e9f960c6b8b57 (diff)
update
Diffstat (limited to 'semestr-5/so/lista4/so21_lista_4/include/rio.h')
-rw-r--r--semestr-5/so/lista4/so21_lista_4/include/rio.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/semestr-5/so/lista4/so21_lista_4/include/rio.h b/semestr-5/so/lista4/so21_lista_4/include/rio.h
new file mode 100644
index 0000000..bd62723
--- /dev/null
+++ b/semestr-5/so/lista4/so21_lista_4/include/rio.h
@@ -0,0 +1,27 @@
+#ifndef _RIO_H_
+#define _RIO_H_
+
+/* Persistent state for the robust I/O (Rio) package */
+#define RIO_BUFSIZE 8192
+
+typedef struct {
+ int rio_fd; /* Descriptor for this internal buf */
+ int rio_cnt; /* Unread bytes in internal buf */
+ char *rio_bufptr; /* Next unread byte in internal buf */
+ char rio_buf[RIO_BUFSIZE]; /* Internal buffer */
+} rio_t;
+
+/* Rio (Robust I/O) package */
+ssize_t rio_readn(int fd, void *usrbuf, size_t n);
+ssize_t rio_writen(int fd, const void *usrbuf, size_t n);
+void rio_readinitb(rio_t *rp, int fd);
+ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n);
+ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen);
+
+/* Wrappers that exit on failure */
+ssize_t Rio_readn(int fd, void *ptr, size_t nbytes);
+void Rio_writen(int fd, const void *usrbuf, size_t n);
+ssize_t Rio_readnb(rio_t *rp, void *usrbuf, size_t n);
+ssize_t Rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen);
+
+#endif /* !_RIO_H_ */