⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linearfile.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* *  IMFS Linear File Handlers * *  This file contains the set of handlers used to process operations on *  IMFS linear memory file nodes.  Linear memory files are contiguous *  blocks of memory created from a TAR or other filesystem image. *  The blocks are nonwriteable and nonresizeable. * *  COPYRIGHT (c) 1989-1999. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: linearfile.c,v 1.4.2.1 2003/09/04 18:47:02 joel Exp $ */#if HAVE_CONFIG_H#include "config.h"#endif#include <stdlib.h>#include <assert.h>#include <string.h>#include <errno.h>#include <rtems.h>#include <rtems/libio.h>#include "imfs.h"#include <rtems/libio_.h>#include <rtems/seterr.h>/* * linearfile_read * *  This routine processes the read() system call. */int linearfile_read(  rtems_libio_t *iop,  void          *buffer,  unsigned32     count){  IMFS_jnode_t   *the_jnode;  unsigned char  *dest;  unsigned char  *file_ptr;  int            file_offset;  the_jnode = iop->file_info;  /*   *  Perform internal consistency checks   */  assert( the_jnode );  if ( !the_jnode )    rtems_set_errno_and_return_minus_one( EIO );  assert( the_jnode->type == IMFS_LINEAR_FILE );  if ( the_jnode->type != IMFS_LINEAR_FILE )    rtems_set_errno_and_return_minus_one( EIO );  /*   *  Error checks on arguments   */  dest = (unsigned char *)buffer;  assert( dest );  if ( !dest )    rtems_set_errno_and_return_minus_one( EINVAL );  /*   *  Perform a simple memory copy.   */  if (count == 0)     return(0);  the_jnode = iop->file_info;  file_ptr    = (unsigned char *)the_jnode->info.linearfile.direct;  file_offset = (unsigned long)iop->offset;  if (count > (the_jnode->info.linearfile.size - file_offset))     count = the_jnode->info.linearfile.size - file_offset;  memcpy(dest, &file_ptr[file_offset], count);  return(count);}/* *  linearfile_lseek * *  This routine processes the lseek() system call. */int linearfile_lseek(  rtems_libio_t   *iop,  off_t            offset,  int              whence){  IMFS_jnode_t   *the_jnode;  the_jnode = iop->file_info;  if (iop->offset > the_jnode->info.linearfile.size)    iop->offset = the_jnode->info.linearfile.size;  return iop->offset;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -