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

📄 io_wce.c

📁 wince下的系统库文件,修改适用于windows移植到CE程序开发
💻 C
字号:
/***************************************************************
   io.c

   author : uema2
  date   : Nov 30, 2002
 
  You can freely use, copy, modify, and redistribute
  the whole contents.
 ***************************************************************/

#include <windows.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include "wince.h" /* for wce_mbtowc */
 
 extern int _errno;
 
 
int _rename(const char *oldname, const char *newname)
{
         wchar_t *wold, *wnew;
         BOOL rc;
 
         wold = wce_mbtowc(oldname);
         wnew = wce_mbtowc(newname);
 
        /* replace with MoveFile. */
        rc = MoveFileW(wold, wnew);
 
         free(wold);
         free(wnew);
 
         return rc==TRUE ? 0 : -1;
 }
 
 int _unlink(const char *file)
 {
        wchar_t *wfile;
         BOOL rc;
 
         /* replace with DeleteFile. */
        wfile = wce_mbtowc(file);
         rc = DeleteFileW(wfile);
        free(wfile);
 
        return rc==TRUE ? 0 : -1;
}
 
 /* replace "open" with "CreateFile", etc. */
int _open(const char *file, int mode, va_list arg)
{
        wchar_t *wfile;
        DWORD access=0, share=0, create=0;
         HANDLE h;
 
         if( (mode&_O_RDWR) != 0 )
                access = GENERIC_READ|GENERIC_WRITE;
       else if( (mode&_O_RDONLY) != 0 )
                 access = GENERIC_READ;
         else if( (mode&_O_WRONLY) != 0 )
                 access = GENERIC_WRITE;
 
         if( (mode&_O_CREAT) != 0 )
                 create = CREATE_ALWAYS;
         else
                 create = OPEN_ALWAYS;
 
        wfile = wce_mbtowc(file);
 
         h = CreateFileW(wfile, access, share, NULL,
                         create, 0, NULL );
 
         free(wfile);
         return (int)h;
 }
 
 int close(int fd)
 {
        CloseHandle( (HANDLE)fd );
         return 0;
 }

int _read(int fd, void *buffer, int length)
 {
         DWORD dw;
         ReadFile( (HANDLE)fd, buffer, length, &dw, NULL );
        return (int)dw;
 }
 
int _write(int fd, const void *buffer, unsigned count)
{
         DWORD dw;
         WriteFile( (HANDLE)fd, buffer, count, &dw, NULL );
         return (int)dw;
}
 
long _lseek(int handle, long offset, int origin)
{
         DWORD flag, ret;

        switch(origin)
         {
        case SEEK_SET: flag = FILE_BEGIN;   break;
        case SEEK_CUR: flag = FILE_CURRENT; break;
         case SEEK_END: flag = FILE_END;     break;
         default:       flag = FILE_CURRENT; break;
         }

         ret = SetFilePointer( (HANDLE)handle, offset, NULL, flag );
         return ret==0xFFFFFFFF ? -1 : 0;
 }

/* _findfirst, _findnext, _findclose. */
 /* replace them with FindFirstFile, etc. */
long _findfirst( char *file, struct _finddata_t *fi )
{
        HANDLE h;
         WIN32_FIND_DATAA fda;

       h = FindFirstFileA( file, &fda );
        if( h==NULL )
        {
                errno = EINVAL; return -1;
        }
 
         fi->attrib      = fda.dwFileAttributes;
         fi->time_create = wce_FILETIME2time_t( &fda.ftCreationTime );
        fi->time_access = wce_FILETIME2time_t( &fda.ftLastAccessTime );
        fi->time_write  = wce_FILETIME2time_t( &fda.ftLastWriteTime );
        fi->size        = fda.nFileSizeLow + (fda.nFileSizeHigh<<32);
         strcpy( fi->name, fda.cFileName );
 
        return (long)h;
 }

int _findnext( long handle, struct _finddata_t *fi )
 {
         WIN32_FIND_DATAA fda;
         BOOL b;

        b = FindNextFileA( (HANDLE)handle, &fda );

        if( b==FALSE )
        {
                errno = ENOENT; return -1;
        }
 
       fi->attrib      = fda.dwFileAttributes;
        fi->time_create = wce_FILETIME2time_t( &fda.ftCreationTime );
       fi->time_access = wce_FILETIME2time_t( &fda.ftLastAccessTime );
        fi->time_write  = wce_FILETIME2time_t( &fda.ftLastWriteTime );
         fi->size        = fda.nFileSizeLow + (fda.nFileSizeHigh<<32);
         strcpy( fi->name, fda.cFileName );

        return 0;
 }
 
 int _findclose( long handle )
{
         BOOL b;
         b = FindClose( (HANDLE)handle );
         return b==FALSE ? -1 : 0;
}

/* below functions unsupported... */
/* I have no idea how to replace... */
 int _chsize(int handle, long size)
{
         errno = EACCES;
         return -1;
 }

int _umask(int cmask)
{
        return 0;
 }
 
int _chmod(const char *path, int mode)
{
         return 0;
}

 /* WinCE doesn't have dup and dup2.  */
 /* so, we cannot use missing/dup2.c. */
int dup( int handle )
{
       errno = EBADF;
         return -1;
 }
/*
 int dup2( int handle1, int handle2 )
 {
         errno = EBADF;
         return -1;
 }
 */
int _isatty(int fd)
 {
         if( fd==(int)_fileno(stdin) || 
                 fd==(int)_fileno(stdout)||
                 fd==(int)_fileno(stderr) )
                return 1;
         else
                return 0;
 }
 
int _pipe(int *phandles, unsigned int psize, int textmode)
 {
         return -1;
}

int _access(const char *filename, int flags)
{
        return 0;
 }
 
int _open_osfhandle( long osfhandle, int flags)
{
/*      return 0; */
         return (int)osfhandle;
 }

long _get_osfhandle( int filehandle )
{
/*      return 0; */
         return (long)filehandle;
}

⌨️ 快捷键说明

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