亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? write.c

?? C語言庫函數的原型,有用的拿去
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***
*write.c - write to a file handle
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines _write() - write to a file handle
*
*******************************************************************************/

#include <cruntime.h>
#include <oscalls.h>
#include <ctype.h>
#include <io.h>
#include <errno.h>
#include <msdos.h>
#include <mtdll.h>
#include <stdlib.h>
#include <string.h>
#include <internal.h>
#include <setlocal.h>
#include <locale.h>
#include <wchar.h>

#define BUF_SIZE    5*1024    /* size of LF translation buffer */
                              /* default buffer is 4K, plus extra for LFs */

/***
*int _write(fh, buf, cnt) - write bytes to a file handle
*
*Purpose:
*       Writes count bytes from the buffer to the handle specified.
*       If the file was opened in text mode, each LF is translated to
*       CR-LF.  This does not affect the return value.  In text
*       mode ^Z indicates end of file.
*
*       Multi-thread notes:
*       (1) _write() - Locks/unlocks file handle
*           _write_nolock() - Does NOT lock/unlock file handle
*
*Entry:
*       int fh - file handle to write to
*       char *buf - buffer to write from
*       unsigned int cnt - number of bytes to write
*
*Exit:
*       returns number of bytes actually written.
*       This may be less than cnt, for example, if out of disk space.
*       returns -1 (and set errno) if fails.
*
*Exceptions:
*
*******************************************************************************/

/* define normal version that locks/unlocks, validates fh */
int __cdecl _write (
        int fh,
        const void *buf,
        unsigned cnt
        )
{
        int r;                          /* return value */


        /* validate handle */
        _CHECK_FH_CLEAR_OSSERR_RETURN( fh, EBADF, -1 );
        _VALIDATE_CLEAR_OSSERR_RETURN((fh >= 0 && (unsigned)fh < (unsigned)_nhandle), EBADF, -1);
        _VALIDATE_CLEAR_OSSERR_RETURN((_osfile(fh) & FOPEN), EBADF, -1);

        _lock_fh(fh);                   /* lock file */

        __try {
                if ( _osfile(fh) & FOPEN )
                        r = _write_nolock(fh, buf, cnt);    /* write bytes */
                else {
                        errno = EBADF;
                        _doserrno = 0;  /* not o.s. error */
                        r = -1;
                        _ASSERTE(("Invalid file descriptor. File possibly closed by a different thread",0));
                }
        }
        __finally {
                _unlock_fh(fh);         /* unlock file */
        }

        return r;
}

/* now define version that doesn't lock/unlock, validate fh */
int __cdecl _write_nolock (
        int fh,
        const void *buf,
        unsigned cnt
        )
{
        int lfcount;            /* count of line feeds */
        int charcount;          /* count of chars written so far */
        int written;            /* count of chars written on this write */
        ULONG dosretval;        /* o.s. return value */
        char tmode ;            /* textmode - ANSI or UTF-16 */
        BOOL toConsole = 0;     /* true when writing to console */
        BOOL isCLocale = 0;     /* true when locale handle is C locale */

        lfcount = charcount = 0;        /* nothing written yet */

        if (cnt == 0)
                return 0;               /* nothing to do */

        _VALIDATE_CLEAR_OSSERR_RETURN( (buf != NULL), EINVAL, -1 );

        tmode = _textmode(fh);

        if(tmode == __IOINFO_TM_UTF16LE ||
                tmode == __IOINFO_TM_UTF8)
        {
            /* For a UTF-16 file, the count must always be an even number */
            _VALIDATE_CLEAR_OSSERR_RETURN(((cnt & 1) == 0), EINVAL, -1);
        }

        if (_osfile(fh) & FAPPEND) {
                /* appending - seek to end of file; ignore error, because maybe
                   file doesn't allow seeking */
                (void)_lseeki64_nolock(fh, 0, FILE_END);
        }

        /* check for text mode with LF's in the buffer */

        /*
         * Note that in case the handle belongs to Console, write file will
         * generate garbage output. For user to print these characters
         * correctly, we will need to print ANSI.
         *
         * Also note that in case of printing to Console, we still have to
         * convert the characters to console codepage.
         */

        if (_isatty(fh) && (_osfile(fh) & FTEXT))
        {
            DWORD dwMode;
            _ptiddata ptd = _getptd();
            isCLocale = (ptd->ptlocinfo->lc_handle[LC_CTYPE] == _CLOCALEHANDLE);
            toConsole = GetConsoleMode((HANDLE)_osfhnd(fh), &dwMode);
        }

        /* don't need double conversion if it's ANSI mode C locale */
        if (toConsole && !(isCLocale && (tmode == __IOINFO_TM_ANSI))) {
            UINT consoleCP = GetConsoleCP();
            char mboutbuf[MB_LEN_MAX];
            wchar_t tmpchar;
            int size = 0;
            int written = 0;
            char *pch;

            for (pch = (char *)buf; (unsigned)(pch - (char *)buf) < cnt; ) {
                BOOL bCR;

                if (tmode == __IOINFO_TM_ANSI) {
                    bCR = *pch == LF;
                    /*
                     * Here we need to do double convert. i.e. convert from
                     * multibyte to unicode and then from unicode to multibyte in
                     * Console codepage.
                     */

                    /*
                     * Here, we have take into account that _write() might be called
                     * byte by byte, so when we see a lead byte without a trail byte,
                     * we have to store it and return no error.
                     */
                    if ( _dbcsBufferUsed(fh) ) {
                        /*
                         * we got something buffered, join it with the lead byte
                         * and convert
                         */
                        _ASSERTE(isleadbyte(_dbcsBuffer(fh)));
                        mboutbuf[0]=_dbcsBuffer(fh);
                        mboutbuf[1] = *pch;
                        /* reseting the flag */
                        _dbcsBufferUsed(fh) = FALSE;

                        if (mbtowc(&tmpchar, mboutbuf, 2) == -1) {
                            break;
                        }
                    } else {
                        if (isleadbyte(*pch)) {
                            if ((cnt - (pch - (char*)buf)) > 1) {
                                // and we have more bytes to read, just convert
                                if (mbtowc(&tmpchar, pch, 2) == -1) {
                                    break;
                                }
                                /*
                                 * Increment pch to accomodate DBCS character.
                                 */
                                ++pch;
                            } else {
                                /* and we ran out of bytes to read, buffer the lead byte */
                                _dbcsBuffer(fh) = *pch;
                                _dbcsBufferUsed(fh) = TRUE;

                                /* lying that we actually wrote the last character,
                                 * so it doesn't error
                                 */
                                charcount++;
                                break;
                            }
                        } else {
                            // single char conversion
                            if (mbtowc(&tmpchar, pch, 1) == -1) {
                                break;
                            }
                        }
                    }
                    ++pch;
                } else if (tmode == __IOINFO_TM_UTF8 || tmode == __IOINFO_TM_UTF16LE) {
                    /*
                     * Note that bCR set above is not valid in case of UNICODE
                     * stream. We need to set it using unicode character.
                     */
                    tmpchar = *(wchar_t *)pch;
                    bCR = tmpchar == LF;
                    pch += 2;
                }

                if (tmode == __IOINFO_TM_ANSI)
                {
                    if( (size = WideCharToMultiByte(consoleCP,
                                                    0,
                                                    &tmpchar,
                                                    1,
                                                    mboutbuf,
                                                    sizeof(mboutbuf),
                                                    NULL,
                                                    NULL)) == 0) {
                        break;
                    } else {
                        if ( WriteFile( (HANDLE)_osfhnd(fh),
                                        mboutbuf,
                                        size,
                                        (LPDWORD)&written,
                                        NULL) ) {
                            /* When we are converting, some convertion can result in
                             * 2 mbcs char -> 1 wchar -> 1 mbcs
                             * (ie. printing out Japanese characters in English ConsoleCP,
                             * the Japanese char will be converted to a single question mark)
                             * Therefore, we want to use how many bytes we converted + lfcount
                             * instead of how many bytes we actually wrote
                             */
                            charcount = lfcount + (int)(pch - (char*) buf);
                            if (written < size)
                                break;
                        } else {
                            dosretval = GetLastError();
                            break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区二区三区| 欧美色图在线观看| 国产日产欧美精品一区二区三区| 久99久精品视频免费观看| 日韩一区二区免费电影| 国产麻豆91精品| 国产精品麻豆一区二区| 91年精品国产| 视频一区二区不卡| 2014亚洲片线观看视频免费| 菠萝蜜视频在线观看一区| 国产精品久久久久久久岛一牛影视| 色综合久久久久久久| 视频一区中文字幕| 久久免费美女视频| 波多野结衣精品在线| 亚洲一区二区不卡免费| 在线播放亚洲一区| 国产一区在线不卡| 一区二区三区免费看视频| 91精品国产品国语在线不卡| 国产精品538一区二区在线| 综合婷婷亚洲小说| 欧美大片一区二区| 99久久伊人网影院| 日韩1区2区日韩1区2区| 国产精品欧美精品| 欧美日韩免费在线视频| 激情综合色播五月| 一区二区三区四区在线免费观看 | 欧美日韩夫妻久久| 国产精品资源网| 亚洲成a人v欧美综合天堂下载| 2017欧美狠狠色| 欧美三级电影网站| 成人一区二区三区视频 | 欧美精品久久久久久久多人混战| 久久99久久精品| 亚洲伦理在线免费看| 久久综合九色综合97婷婷| 在线精品视频一区二区三四| 国产一区二区免费在线| 亚洲一区电影777| 中文字幕精品—区二区四季| 欧美一区二区三区视频免费 | 国产成人精品免费在线| 亚洲综合免费观看高清完整版| 国产肉丝袜一区二区| 欧美日韩视频专区在线播放| 本田岬高潮一区二区三区| 麻豆精品一区二区三区| 亚洲成人7777| 国产精品久久久久久久久动漫| 久久久久久久电影| 91精品国产色综合久久| 在线亚洲免费视频| 91丝袜高跟美女视频| 国产成人自拍网| 久久国产精品区| 视频一区二区中文字幕| 一区二区成人在线观看| 中文字幕在线一区| 久久精品日韩一区二区三区| 91精品国产综合久久久久久久 | 国产成人精品一区二| 精品亚洲欧美一区| 免费观看一级特黄欧美大片| 日韩精品午夜视频| 日韩在线观看一区二区| 亚洲一二三级电影| 亚洲国产成人porn| 亚洲国产精品一区二区久久恐怖片| 亚洲精品成人在线| 亚洲天堂福利av| 亚洲人成电影网站色mp4| 亚洲色图19p| 亚洲九九爱视频| 一区二区在线观看免费| 一区二区三区高清| 亚洲r级在线视频| 日韩av不卡一区二区| 蜜桃视频第一区免费观看| 免费高清不卡av| 韩国女主播成人在线| 国产一二三精品| 处破女av一区二区| 成人国产精品视频| 91看片淫黄大片一级在线观看| 91亚洲精华国产精华精华液| 91免费精品国自产拍在线不卡| 色婷婷一区二区三区四区| 91黄色免费版| 欧美一区二区三区播放老司机| 精品伦理精品一区| 中文字幕精品一区| 洋洋av久久久久久久一区| 天天做天天摸天天爽国产一区 | 欧美精品三级在线观看| 精品国产亚洲在线| 国产精品沙发午睡系列990531| 国产精品九色蝌蚪自拍| 亚洲高清免费一级二级三级| 男女激情视频一区| 国产91对白在线观看九色| 99视频国产精品| 欧美日韩亚洲综合一区| 精品久久久影院| 国产精品成人网| 亚洲成人黄色小说| 韩国av一区二区三区在线观看| 丁香网亚洲国际| 欧美男男青年gay1069videost| 日韩精品专区在线影院重磅| 国产精品免费视频网站| 一个色妞综合视频在线观看| 久久国产精品第一页| 色综合久久综合网97色综合 | 国产亚洲污的网站| 亚洲综合色区另类av| 精品一区二区三区在线观看 | 91精品在线免费| 久久亚洲一级片| 亚洲免费观看视频| 久久精品国产亚洲一区二区三区| 成人免费va视频| 91精品国产综合久久精品app| 国产精品色呦呦| 久久99热国产| 91久久精品日日躁夜夜躁欧美| 亚洲精品一区在线观看| 亚洲综合成人在线视频| 国产99精品视频| 91麻豆精品国产| 亚洲美女屁股眼交| 国产一区二区电影| 欧美日韩亚洲综合在线 | 久久久久亚洲蜜桃| 亚洲mv在线观看| 色婷婷精品久久二区二区蜜臂av | 亚洲精品一区二区在线观看| 亚洲永久精品国产| 成人av在线资源网站| 精品久久久久99| 日韩av在线免费观看不卡| 99视频精品在线| 久久九九全国免费| 调教+趴+乳夹+国产+精品| 99re热视频这里只精品 | 国产精品女人毛片| 精彩视频一区二区| 欧美一区欧美二区| 亚洲成人av免费| 欧美性生活影院| 亚洲天堂精品视频| 成人国产精品免费网站| 久久亚洲二区三区| 激情综合色综合久久综合| 日韩欧美久久久| 免费人成精品欧美精品| 欧美久久一二三四区| 亚洲gay无套男同| 欧洲中文字幕精品| 亚洲一区二区三区中文字幕 | 国产日韩精品一区二区三区 | 国产精品亚洲午夜一区二区三区| 精品日韩一区二区三区 | 日韩电影在线免费| 91精品黄色片免费大全| 日本欧美一区二区在线观看| 8v天堂国产在线一区二区| 天天综合天天做天天综合| 欧美久久一二三四区| 日韩激情一二三区| 日韩欧美黄色影院| 国产高清无密码一区二区三区| 久久亚洲春色中文字幕久久久| 国产黄色精品网站| 中文字幕欧美日本乱码一线二线| 成人av网站在线| 亚洲自拍偷拍麻豆| 欧美男女性生活在线直播观看| 免费在线欧美视频| 久久久亚洲精品一区二区三区 | 色综合一个色综合亚洲| 亚洲欧美日韩精品久久久久| 91精品1区2区| 日本欧美一区二区三区| 日韩天堂在线观看| 国产精品1区2区3区在线观看| 国产精品美女久久久久久2018| 91精品办公室少妇高潮对白| 视频一区中文字幕| 久久久精品黄色| 91国产精品成人| 免费成人性网站| 国产精品女主播av| 欧美高清www午色夜在线视频| 精品在线播放午夜| 亚洲男人的天堂网| 日韩欧美国产电影|