edit scripts
[c11concurrency-benchmarks.git] / iris / src / stream_writer.cpp
1 #include <errno.h>
2 #include <sys/types.h>
3 #include <unistd.h>
4 #include <string.h>
5
6 #include <define.h>
7 #include <stream_writer.h>
8 using namespace iris;
9
10 stream_writer::stream_writer(FILE * stream): m_stream(stream), m_fd(-1) {
11     if (stream)
12         m_fd = fileno(m_stream);
13 }
14
15 void stream_writer::write(const char * msg) {
16     size_t len = strlen(msg);
17     this->write(msg, len);
18 }
19
20 void stream_writer::write(const char * buffer, size_t len){
21     size_t written = 0;
22     while (written < len) {
23         size_t n = fwrite(buffer + written, 1, len - written, m_stream);
24         written += n;
25         if (n < len) {
26             if (errno == EINTR) {
27                 continue;
28             }
29             fprintf(stderr, "[iris] error, should write %lu byts, only %lu bytes written, reason: %s.\n", len, n, strerror(errno));
30             break;
31         }
32     }
33     fflush(m_stream);
34 }