diff options
author | kos <kos@dev3> | 2013-10-31 03:14:08 (GMT) |
---|---|---|
committer | kos <kos@dev3> | 2013-10-31 03:14:08 (GMT) |
commit | 793f6307366bc810831a178a7cef335387f99faa (patch) | |
tree | 9e27ce189feb0f795bb4f088b1d424e9a3d2abfd | |
parent | 229a94a6507196a45823b8f0d7b03784e158d9b2 (diff) |
fixed to handle large files.
-rw-r--r-- | src/eFilePumpThread.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/eFilePumpThread.cpp b/src/eFilePumpThread.cpp index 7659a4d..4cd7fa6 100644 --- a/src/eFilePumpThread.cpp +++ b/src/eFilePumpThread.cpp @@ -11,6 +11,7 @@ #include <poll.h> #include <stdio.h> +#include <fcntl.h> #include "ePreDefine.h" #include "eFilePumpThread.h" @@ -36,7 +37,8 @@ void eFilePumpThread::Run() { int rc = 0; unsigned char buffer[BUFFER_SIZE]; - FILE* mediafilefd = fopen(mFileName.c_str(), "rb"); + int mediafilefd = open(mFileName.c_str(), O_RDONLY | O_LARGEFILE); + struct pollfd pollevt; pollevt.fd = mDeviceFd; @@ -48,15 +50,17 @@ void eFilePumpThread::Run() rc = poll((struct pollfd*)&pollevt, 1, 1000); if (pollevt.revents & POLLOUT) { - rc = fread(buffer, 1, BUFFER_SIZE, mediafilefd); - if(!rc) break; + rc = read(mediafilefd, buffer, BUFFER_SIZE); + if(rc < 0) { + break; + } #ifdef DEBUG_LOG LOG("%d byte write.", rc); #endif rc = write(mDeviceFd, buffer, rc); } } - fclose(mediafilefd); + close(mediafilefd); mTermFlag = false; } //------------------------------------------------------------------------------- |