本文整理汇总了C++中CNfsConnection::GetMaxWriteChunkSize方法的典型用法代码示例。如果您正苦于以下问题:C++ CNfsConnection::GetMaxWriteChunkSize方法的具体用法?C++ CNfsConnection::GetMaxWriteChunkSize怎么用?C++ CNfsConnection::GetMaxWriteChunkSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNfsConnection
的用法示例。
在下文中一共展示了CNfsConnection::GetMaxWriteChunkSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Write
//this was a bitch!
//for nfs write to work we have to write chunked
//otherwise this could crash on big files
ssize_t CNFSFile::Write(const void* lpBuf, size_t uiBufSize)
{
size_t numberOfBytesWritten = 0;
int writtenBytes = 0;
size_t leftBytes = uiBufSize;
//clamp max write chunksize to 32kb - fixme - this might be superfluious with future libnfs versions
size_t chunkSize = gNfsConnection.GetMaxWriteChunkSize() > 32768 ? 32768 : (size_t)gNfsConnection.GetMaxWriteChunkSize();
CSingleLock lock(gNfsConnection);
if (m_pFileHandle == NULL || m_pNfsContext == NULL) return -1;
//write as long as some bytes are left to be written
while( leftBytes )
{
//the last chunk could be smalle than chunksize
if(leftBytes < chunkSize)
{
chunkSize = leftBytes;//write last chunk with correct size
}
//write chunk
writtenBytes = gNfsConnection.GetImpl()->nfs_write(m_pNfsContext,
m_pFileHandle,
chunkSize,
(char *)lpBuf + numberOfBytesWritten);
//decrease left bytes
leftBytes-= writtenBytes;
//increase overall written bytes
numberOfBytesWritten += writtenBytes;
//danger - something went wrong
if (writtenBytes < 0)
{
CLog::Log(LOGERROR, "Failed to pwrite(%s) %s\n", m_url.GetFileName().c_str(), gNfsConnection.GetImpl()->nfs_get_error(m_pNfsContext));
if (numberOfBytesWritten == 0)
return -1;
break;
}
}
//return total number of written bytes
return numberOfBytesWritten;
}