#android #android-ndk #errno #android-2.1-eclair
#Android #android-ndk #ошибка отсутствует #android-2.1-eclair
Вопрос:
Я выполняю простую операцию копирования файла, используя open (2), pread (2) и pwrite (2), как показано ниже (код немного упрощен). Моя проблема в том, что функции :: pread (2) завершаются с ошибкой, возвращающей значение -1 с [errno = 22]. Обратите внимание, что как исходные, так и целевые файлы размещены на SD-карте. Эта проблема возникает на Android 2.1 (уровень API <= 7, как для эмулятора, так и для реального устройства), без проблем при запуске на Android 2.3 (уровень API 9). Есть ли проблема в моем коде или это ошибка в kernel / stdlib?
fileSource = ::open(pcSource, O_RDONLY);
fileDest = ::open(pcDest, O_RDWR|O_TRUNC|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO)
unsigned uiCopyLen = 0;
unsigned uiCopied = 0;
struct stat fileStatus;
fileStatus.st_size = 0;
::fstat(fileSource, amp;fileStatus);
char * cBuffer = new char[fileStatus.st_blksize];
// ... <in loop>
::pread(fileSource, cBuffer, fileStatus.st_blksize, uiCopied); // errno 22, Invalid argument
::pwrite(fileDest, cBuffer, iLen, uiCopied);
// ... </in loop>
Также обратите внимание, что при использовании read (2), write (2) или переключении на streamed API (fread(3), fwrite (3)) все работает правильно. Странно.