Есть у меня буфер, нужно его записать в /dev/mtd4, а оставшуюся часть раздела нулями забить. Делаю так:
static const int dataBlockSize = 8192;
int mtdBlockFd = open( "/dev/mtd4", O_WRONLY | O_CREAT | O_TRUNC, 0666 );
int bytesWritten = 0;
while( bytesInBufLeft > dataBlockSize )
{
bytesWritten = safe_write( mtdBlockFd, bufPtr, dataBlockSize );
bytesInBufLeft -= bytesWritten;
bufPtr += bytesWritten;
}
if( (bytesInBufLeft - dataBlockSize) > 0 )
{
bytesWritten = safe_write( mtdBlockFd, bufPtr, bytesInBufLeft - dataBlockSize );
}
do
{
static const char zeroBuf[dataBlockSize] = {0};
bytesWritten = safe_write( mtdBlockFd, zeroBuf, dataBlockSize );
} while( bytesWritten > 0);
safe_write подсмотрел, в dd, когда с просто write не работало, но и это не помогло:
int safe_write(int fd, const void *buf, int count)
{
int n;
do {
n = write(fd, buf, count);
} while (n < 0 && errno == EINTR);
return n;
}
Кто-нибдудь что-нибудь подобное делал? В чем может быть косяк? Если вместо /dev/mtd4 имя простого файла указать, то в него все нормально пишется.