《Windows系统编程》读后感(一)

时间:2021-07-05 16:35:56

      读了前5章,感触最深的是作者在例子程序中对UNICODE的考虑,另外就是将windowsAPIUNIX进行对比,结合前段时间在看的《UNIX网络编程 2》,感觉对比性很强。

      印象最深刻的就是第 5 章的 3 个排序示例,将外部文件排序用内存来实现,堆,内存映射文件以及基准指针的使用让人大开眼见,不过比之《 windows 核心编程》还是有差距
《Windows系统编程》读后感(一)#include  " EvryThng.h "
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
#define  KEY_SIZE 8
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Structure definition for a tree node. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)typedef 
struct  _TreeNode  {
《Windows系统编程》读后感(一)    
struct _TreeNode *Left, *Right;
《Windows系统编程》读后感(一)    TCHAR Key [KEY_SIZE];
《Windows系统编程》读后感(一)    LPTSTR pData;
《Windows系统编程》读后感(一)}
 TREENODE,  * LPTNODE,  ** LPPTNODE;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
#define  NODE_SIZE sizeof (TREENODE)
《Windows系统编程》读后感(一)
#define  NODE_HEAP_ISIZE 0x8000
《Windows系统编程》读后感(一)
#define  DATA_HEAP_ISIZE 0x8000
《Windows系统编程》读后感(一)
#define  MAX_DATA_LEN 0x1000
《Windows系统编程》读后感(一)
#define  TKEY_SIZE KEY_SIZE * sizeof (TCHAR)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)LPTNODE FillTree (HANDLE, HANDLE, HANDLE);
《Windows系统编程》读后感(一)BOOL Scan (LPTNODE);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR, LPCTSTR); iFile;  /* for access in exception handler */
《Windows系统编程》读后感(一)BOOL InsertTree (LPPTNODE, LPTNODE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  _tmain ( int  argc, LPTSTR argv [])
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    HANDLE hIn, hNode 
= NULL, hData = NULL;
《Windows系统编程》读后感(一)    LPTNODE pRoot;
《Windows系统编程》读后感(一)    BOOL NoPrint;
《Windows系统编程》读后感(一)    CHAR ErrorMessage[
256];
《Windows系统编程》读后感(一)    
int iFirstFile = Options (argc, argv, _T ("n"), &NoPrint, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (argc <= iFirstFile)
《Windows系统编程》读后感(一)        ReportError (_T (
"Usage: sortBT [options] files"), 1, FALSE);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Process all files on the command line. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
for (iFile = iFirstFile; iFile < argc; iFile++) __try {
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Open the input file. */
《Windows系统编程》读后感(一)        hIn 
= CreateFile (argv [iFile], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
《Windows系统编程》读后感(一)        
if (hIn == INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)            RaiseException (
000, NULL);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Allocate the two heaps. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        __try 
{
《Windows系统编程》读后感(一)            hNode 
= HeapCreate ( 
《Windows系统编程》读后感(一)                HEAP_GENERATE_EXCEPTIONS 
| HEAP_NO_SERIALIZE, NODE_HEAP_ISIZE, 0);
《Windows系统编程》读后感(一)            hData 
= HeapCreate (
《Windows系统编程》读后感(一)                HEAP_GENERATE_EXCEPTIONS 
| HEAP_NO_SERIALIZE, DATA_HEAP_ISIZE, 0);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Process the input file, creating the tree. */
《Windows系统编程》读后感(一)            pRoot 
= FillTree (hIn, hNode, hData);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Display the tree in Key order. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            
if (!NoPrint) {
《Windows系统编程》读后感(一)                _tprintf (_T (
"Sorted file: %s\n"), argv [iFile]);
《Windows系统编程》读后感(一)                Scan (pRoot);
《Windows系统编程》读后感(一)            }
 
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        }
 __finally /* Heaps and file handle are always closed */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            
/* Destroy the two heaps and data structures. */
《Windows系统编程》读后感(一)            
if (hNode != NULL) HeapDestroy (hNode);
《Windows系统编程》读后感(一)            
if (hNode != NULL) HeapDestroy (hData);
《Windows系统编程》读后感(一)            hNode 
= NULL; hData = NULL;
《Windows系统编程》读后感(一)            
if (hIn != INVALID_HANDLE_VALUE) CloseHandle (hIn);
《Windows系统编程》读后感(一)        }

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    }
 /* End of main file processing loop and try block. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    __except (EXCEPTION_EXECUTE_HANDLER) 
{
《Windows系统编程》读后感(一)        _stprintf (ErrorMessage, _T(
"\n%s %s"), _T("sortBT error on file:"), argv[iFile]);
《Windows系统编程》读后感(一)        ReportError (ErrorMessage, 
0, TRUE);
《Windows系统编程》读后感(一)    }

《Windows系统编程》读后感(一)    
return 0;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)LPTNODE FillTree (HANDLE hIn, HANDLE hNode, HANDLE hData)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Scan the input file, creating a binary search tree in the
《Windows系统编程》读后感(一)    hNode heap with data pointers to the hData heap. 
*/

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Use the calling program's exception handler. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    LPTNODE pRoot 
= NULL, pNode;
《Windows系统编程》读后感(一)    DWORD nRead, i;
《Windows系统编程》读后感(一)    BOOL AtCR;
《Windows系统编程》读后感(一)    TCHAR DataHold [MAX_DATA_LEN];
《Windows系统编程》读后感(一)    LPTSTR pString;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Open the input file. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
while (TRUE) {
《Windows系统编程》读后感(一)        pNode 
= HeapAlloc (hNode, HEAP_ZERO_MEMORY, NODE_SIZE);
《Windows系统编程》读后感(一)        pNode
->pData = NULL;
《Windows系统编程》读后感(一)        (pNode
->Left) = pNode->Right = NULL;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Read the key. Return if done. */
《Windows系统编程》读后感(一)        
if (!ReadFile (hIn, pNode->Key, TKEY_SIZE,
《Windows系统编程》读后感(一)                
&nRead, NULL) || nRead != TKEY_SIZE)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                    
/* Assume end of file on error. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            
return pRoot;    /* Read the data until the end of line. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        AtCR 
= FALSE;         /* Last character was not a CR. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
for (i = 0; i < MAX_DATA_LEN; i++{
《Windows系统编程》读后感(一)            ReadFile (hIn, 
&DataHold [i], TSIZE, &nRead, NULL);
《Windows系统编程》读后感(一)            
if (AtCR && DataHold [i] == LF) break;
《Windows系统编程》读后感(一)            AtCR 
= (DataHold [i] == CR);
《Windows系统编程》读后感(一)        }

《Windows系统编程》读后感(一)        DataHold [i 
- 1= '\0';
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* DataHold contains the data without the key.
《Windows系统编程》读后感(一)            Combine the Key and the Data. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)        pString 
= HeapAlloc (hData, HEAP_ZERO_MEMORY,
《Windows系统编程》读后感(一)                (SIZE_T)(KEY_SIZE 
+ _tcslen (DataHold) + 1* TSIZE);
《Windows系统编程》读后感(一)        memcpy (pString, pNode
->Key, TKEY_SIZE);
《Windows系统编程》读后感(一)        pString [KEY_SIZE] 
= '\0';
《Windows系统编程》读后感(一)        _tcscat (pString, DataHold);
《Windows系统编程》读后感(一)        pNode
->pData = pString;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                
/* Insert the new node into the search tree. */
《Windows系统编程》读后感(一)        InsertTree (
&pRoot, pNode);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    }
 /* End of while (TRUE) loop */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
return NULL; /* Failure */
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)BOOL InsertTree (LPPTNODE ppRoot, LPTNODE pNode)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Insert the new node, pNode, into the binary search tree, pRoot. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
if (*ppRoot == NULL) {
《Windows系统编程》读后感(一)        
*ppRoot = pNode;
《Windows系统编程》读后感(一)        
return TRUE;
《Windows系统编程》读后感(一)    }

《Windows系统编程》读后感(一)    
if (KeyCompare (pNode->Key, (*ppRoot)->Key) < 0)
《Windows系统编程》读后感(一)        InsertTree (
&((*ppRoot)->Left), pNode);
《Windows系统编程》读后感(一)    
else
《Windows系统编程》读后感(一)        InsertTree (
&((*ppRoot)->Right), pNode);
《Windows系统编程》读后感(一)    
return TRUE;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR pKey1, LPCTSTR pKey2)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Compare two records of generic characters.
《Windows系统编程》读后感(一)    The key position and length are global variables. 
*/

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    
return _tcsncmp (pKey1, pKey2, KEY_SIZE);
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
static  BOOL Scan (LPTNODE pNode)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Scan and print the contents of a binary tree. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    
if (pNode == NULL)
《Windows系统编程》读后感(一)        
return TRUE;
《Windows系统编程》读后感(一)    Scan (pNode
->Left);
《Windows系统编程》读后感(一)    _tprintf (_T (
"%s\n"), pNode->pData);
《Windows系统编程》读后感(一)    Scan (pNode
->Right);
《Windows系统编程》读后感(一)    
return TRUE;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)

《Windows系统编程》读后感(一)#include  " EvryThng.h "
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Definitions of the record structure in the sort file. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
#define  DATALEN 56
《Windows系统编程》读后感(一)
#define  KEY_SIZE 8
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)typedef 
struct  _RECORD  {
《Windows系统编程》读后感(一)    TCHAR Key [KEY_SIZE];
《Windows系统编程》读后感(一)    TCHAR Data [DATALEN];
《Windows系统编程》读后感(一)}
 RECORD;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
#define  RECSIZE sizeof (RECORD)
《Windows系统编程》读后感(一)typedef RECORD 
*  LPRECORD;
《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR, LPCTSTR);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  _tmain ( int  argc, LPTSTR argv [])
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* The file is the first argument. Sorting is done in place. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Sorting is done by file memory mapping. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    HANDLE hFile 
= INVALID_HANDLE_VALUE, hMap = NULL;
《Windows系统编程》读后感(一)    HANDLE hStdOut 
= GetStdHandle (STD_OUTPUT_HANDLE);
《Windows系统编程》读后感(一)    LPVOID pFile 
= NULL;
《Windows系统编程》读后感(一)    DWORD FsLow, Result 
= 2;
《Windows系统编程》读后感(一)    TCHAR TempFile [MAX_PATH];
《Windows系统编程》读后感(一)    LPTSTR pTFile;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    BOOL NoPrint;
《Windows系统编程》读后感(一)    
int iFirstFile;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    iFirstFile 
= Options (argc, argv, _T ("n"), &NoPrint, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (argc <= iFirstFile)
《Windows系统编程》读后感(一)        ReportError (_T (
"Usage: sortFL [options] files"), 1, FALSE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)_try 
{    /* try-except */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Copy the input file to a temp output file that will be sorted.
《Windows系统编程》读后感(一)            Do not alter the input file. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    _stprintf (TempFile, _T (
"%s%s"), argv [iFirstFile], _T (".tmp"));
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    CopyFile (argv [iFirstFile], TempFile, TRUE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    Result 
= 1;     /* tmp file is new and should be deleted. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Open the file (use the temporary copy). */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hFile 
= CreateFile (TempFile, GENERIC_READ
《Windows系统编程》读后感(一)            
| GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (hFile ==INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)        ReportException (_T (
"File open failed."), 2);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Get file size.
《Windows系统编程》读后感(一)            If the file is too large, catch that when it is mapped. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    FsLow 
= GetFileSize (hFile, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
if (FsLow == 0/* There is nothing to sort */
《Windows系统编程》读后感(一)        CloseHandle (hFile);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
return 0;    /* You might want to put out an informational message */
《Windows系统编程》读后感(一)    }

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Create a file mapping object.
《Windows系统编程》读后感(一)            Use the file size but add space for the null character. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hMap 
= CreateFileMapping (hFile, NULL, PAGE_READWRITE, 0, FsLow + TSIZE, NULL);
《Windows系统编程》读后感(一)    
if (hMap == NULL)
《Windows系统编程》读后感(一)        ReportException (_T (
"Create File map failed."), 3);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    pFile 
= MapViewOfFile (hMap, FILE_MAP_ALL_ACCESS, 00 /* FsLow + TSIZE */0);
《Windows系统编程》读后感(一)    
if (pFile == NULL) 
《Windows系统编程》读后感(一)        ReportException (_T (
"MapView failed"), 4);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Now sort the file.
《Windows系统编程》读后感(一)            Perform the sort with the C library - in mapped memory. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    qsort (pFile, FsLow 
/ RECSIZE, RECSIZE, KeyCompare);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Print out the entire sorted file. Treat it as one single string. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    pTFile 
= (LPTSTR) pFile;
《Windows系统编程》读后感(一)    pTFile [FsLow
/TSIZE] = '\0';
《Windows系统编程》读后感(一)    
if (!NoPrint)
《Windows系统编程》读后感(一)        PrintMsg (hStdOut, pFile);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Indicate successful completion. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    Result 
= 0;              
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    ReportException (EMPTY, 
5); /* Force an exception to clean up. */
《Windows系统编程》读后感(一)    
return 0;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)}
 /* End of inner try-except. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)_except (EXCEPTION_EXECUTE_HANDLER) 
{
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Catch any exception here. Indicate any error.
《Windows系统编程》读后感(一)        This is the normal termination. Delete the temporary
《Windows系统编程》读后感(一)        file and Free all the resources. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (pFile != NULL)
《Windows系统编程》读后感(一)        UnmapViewOfFile (pFile);
《Windows系统编程》读后感(一)    
if (hMap != NULL)
《Windows系统编程》读后感(一)        CloseHandle (hMap);
《Windows系统编程》读后感(一)    
if (hFile != INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)        CloseHandle (hFile);
《Windows系统编程》读后感(一)    
if (Result != 2)
《Windows系统编程》读后感(一)        DeleteFile (TempFile);
《Windows系统编程》读后感(一)    
return Result;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)}
  /* End of _tmain */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/*  CODE FROM HERE TO END IS NOT INCLUDED IN TEXT. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR pKey1, LPCTSTR pKey2)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Compare two records of generic characters.
《Windows系统编程》读后感(一)    The key position and length are global variables. 
*/

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    
return _tcsncmp (pKey1, pKey2, KEY_SIZE);
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)

《Windows系统编程》读后感(一)#include  " EvryThng.h "
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR, LPCTSTR);
《Windows系统编程》读后感(一)DWORD CreateIndexFile (DWORD, LPCTSTR, LPTSTR);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)DWORD_PTR KStart, KSize;    
/* Key start position & size (TCHAR). */
《Windows系统编程》读后感(一)BOOL Revrs;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  _tmain ( int  argc, LPTSTR argv [])
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* The file is the first argument. Sorting is done in place. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Sorting is done by file memory mapping. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    HANDLE hInFile, hInMap;    
/* Input file handles. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    HANDLE hXFile, hXMap;    
/* Index file handles. */
《Windows系统编程》读后感(一)    HANDLE hStdOut 
= GetStdHandle (STD_OUTPUT_HANDLE);
《Windows系统编程》读后感(一)    BOOL IdxExists, NoPrint;
《Windows系统编程》读后感(一)    DWORD FsIn, FsX, RSize, iKey, nWrite, 
*pSizes;
《Windows系统编程》读后感(一)    LPTSTR pInFile 
= NULL;
《Windows系统编程》读后感(一)    LPBYTE pXFile 
= NULL, pX; 
《Windows系统编程》读后感(一)    TCHAR _based (pInFile) 
*pIn;
《Windows系统编程》读后感(一)    TCHAR IdxFlNam [MAX_PATH], ChNewLine 
= '\n';
《Windows系统编程》读后感(一)    
int FlIdx;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Determine the options. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)     FlIdx 
= Options (argc, argv, _T ("rIn"), &Revrs, &IdxExists, &NoPrint, NULL);
《Windows系统编程》读后感(一)    
if (FlIdx >= argc)
《Windows系统编程》读后感(一)        ReportError (_T (
"No file name on command line."), 1, FALSE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Step 1: Open and Map the Input File. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hInFile 
= CreateFile (argv [FlIdx], GENERIC_READ | GENERIC_WRITE,
《Windows系统编程》读后感(一)            
0, NULL, OPEN_EXISTING, 0, NULL);
《Windows系统编程》读后感(一)    
if (hInFile == INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to open input file."), 2, TRUE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Create a file mapping object. Use the file size. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hInMap 
= CreateFileMapping (hInFile, NULL, PAGE_READWRITE, 00, NULL);
《Windows系统编程》读后感(一)    
if (hInMap == NULL)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to create input file mapping."), 3, TRUE);
《Windows系统编程》读后感(一)    pInFile 
= MapViewOfFile (hInMap, FILE_MAP_ALL_ACCESS, 000);
《Windows系统编程》读后感(一)    
if (pInFile == NULL)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to map input file."), 4, TRUE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Get the file size.
《Windows系统编程》读后感(一)            As the mapping succeeded, the file size is less than 2 GB. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    FsIn 
= GetFileSize (hInFile, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Create the index file name. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    _stprintf (IdxFlNam, _T (
"%s%s"), argv [FlIdx], _T (".idx"));
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Steps 2 and 3, if necessary. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (!IdxExists)
《Windows系统编程》读后感(一)        RSize 
= CreateIndexFile (FsIn, IdxFlNam, pInFile);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Step 4. Map the index file. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hXFile 
= CreateFile (IdxFlNam, GENERIC_READ | GENERIC_WRITE,
《Windows系统编程》读后感(一)            
0, NULL, OPEN_EXISTING, 0, NULL);
《Windows系统编程》读后感(一)    
if (hXFile == INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to open existing index file."), 5, TRUE);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Create a file mapping object. Use the file size. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hXMap 
= CreateFileMapping (hXFile, NULL, PAGE_READWRITE, 00, NULL);
《Windows系统编程》读后感(一)    
if (hXMap == NULL)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to create index file mapping."), 6, TRUE);
《Windows系统编程》读后感(一)    pXFile 
= MapViewOfFile (hXMap, FILE_MAP_ALL_ACCESS, 000);    
《Windows系统编程》读后感(一)    
if (pXFile == NULL)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failed to map index file."), 7, TRUE);
《Windows系统编程》读后感(一)    FsX 
= GetFileSize (hXFile, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Get the key size/key start and adjust the file size for the
《Windows系统编程》读后感(一)        KeySize/KeyStart fields. Compute the record size from the key size. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    pSizes 
= (LPDWORD)pXFile; KSize = *pSizes; 
《Windows系统编程》读后感(一)    KStart 
= *(pSizes + 1);
《Windows系统编程》读后感(一)    FsX 
-= 2 * sizeof (DWORD); 
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Step 5. Sort the index file using qsort. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (!IdxExists)
《Windows系统编程》读后感(一)        qsort (pXFile 
+ 2 * sizeof (DWORD), FsX / RSize, RSize, KeyCompare);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Step 6. Output the input file in sorted order. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Point to the address of the input file string.
《Windows系统编程》读后感(一)            Start in the Input file. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    pX 
= pXFile + 2 * sizeof (DWORD) + RSize - sizeof (LPTSTR);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    
if (!NoPrint)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
for (iKey = 0; iKey < FsX / RSize; iKey++{        
《Windows系统编程》读后感(一)        WriteFile (hStdOut, 
&ChNewLine, TSIZE, &nWrite, NULL);
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            
/* The cast on pX is important, as it is a pointer to a
《Windows系统编程》读后感(一)                byte and we need the four bytes of a based pointer. 
*/

《Windows系统编程》读后感(一)        pIn 
= (TCHAR _based (pInFile)**(DWORD_PTR *) pX;
《Windows系统编程》读后感(一)        
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
while ((*pIn != CR || *(pIn + 1!= LF) && (SIZE_T) pIn < (SIZE_T)FsIn) {
《Windows系统编程》读后感(一)            WriteFile (hStdOut, pIn, TSIZE, 
&nWrite, NULL);
《Windows系统编程》读后感(一)            pIn
++;
《Windows系统编程》读后感(一)        }

《Windows系统编程》读后感(一)        pX 
+= RSize;
《Windows系统编程》读后感(一)     }

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Done. Free all the handles and maps. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    UnmapViewOfFile (pInFile);
《Windows系统编程》读后感(一)    CloseHandle (hInMap);
《Windows系统编程》读后感(一)    CloseHandle (hInFile);
《Windows系统编程》读后感(一)    UnmapViewOfFile (pXFile);
《Windows系统编程》读后感(一)    CloseHandle (hXMap);
《Windows系统编程》读后感(一)    CloseHandle (hXFile);
《Windows系统编程》读后感(一)    
return 0;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)    
《Windows系统编程》读后感(一)DWORD CreateIndexFile (DWORD FsIn, LPCTSTR IdxFlNam, LPTSTR pInFile)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Perform Steps 2-3 as defined in program description. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* This step will be skipped if the options specify use of an existing index file. */
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    HANDLE hXFile;
《Windows系统编程》读后感(一)    TCHAR _based (pInFile) 
*pInScan = 0;
《Windows系统编程》读后感(一)    DWORD nWrite;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Step 2a: Create an index file.
《Windows系统编程》读后感(一)        Do not map it yet as its length is not known. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    hXFile 
= CreateFile (IdxFlNam, GENERIC_READ | GENERIC_WRITE,
《Windows系统编程》读后感(一)            FILE_SHARE_READ, NULL, CREATE_ALWAYS, 
0, NULL);
《Windows系统编程》读后感(一)    
if (hXFile == INVALID_HANDLE_VALUE)
《Windows系统编程》读后感(一)        ReportError (_T (
"Failure to create index file."), 8, TRUE);
《Windows系统编程》读后感(一)    
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Step 2b: Get the first key and determine key size and start. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    KStart 
= (DWORD_PTR) pInScan;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                
/* Computed start of key field. */
《Windows系统编程》读后感(一)    
while (*pInScan != ' ' && *pInScan != '\t') pInScan++;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                
/* Computed end of key field */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    KSize 
= ((DWORD_PTR) pInScan - KStart) / TSIZE;
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        
/* Computed key field size in characters. */
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* Step 2c. Step 3. Scan the complete file, writing keys
《Windows系统编程》读后感(一)        and record pointers to the key file. 
*/

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
/* The eight bytes contain the Key Size/Key Start.
《Windows系统编程》读后感(一)        This is necessary so that we can re-use the index file. 
*/

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)    WriteFile (hXFile, 
&KSize, sizeof (DWORD), &nWrite, NULL);
《Windows系统编程》读后感(一)    WriteFile (hXFile, 
&KStart, sizeof (DWORD), &nWrite, NULL);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    pInScan 
= /*(TCHAR _based (pInFile)*)*/0;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
while ((DWORD_PTR) pInScan < FsIn) {
《Windows系统编程》读后感(一)        WriteFile (hXFile, pInScan 
+ KStart, KSize * TSIZE, &nWrite, NULL);
《Windows系统编程》读后感(一)        WriteFile (hXFile, 
&pInScan, sizeof (LPTSTR), &nWrite, NULL);
《Windows系统编程》读后感(一)        
while ((DWORD) (DWORD_PTR)pInScan < FsIn && ((*pInScan != CR)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)                
|| (*(pInScan + 1!= LF))) {
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            pInScan
++/* Skip to end of line. */
《Windows系统编程》读后感(一)        }

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)        pInScan 
+= 2/* Skip past CR, LF. */
《Windows系统编程》读后感(一)    }

《Windows系统编程》读后感(一)    CloseHandle (hXFile);
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)            
/* Size of an individual record. */
《Windows系统编程》读后感(一)    
return KSize * TSIZE + sizeof (LPTSTR);
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)
int  KeyCompare (LPCTSTR pKey1, LPCTSTR pKey2)
《Windows系统编程》读后感(一)
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
/* Compare two records of generic characters.
《Windows系统编程》读后感(一)    The key position and length are global variables. 
*/

《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)
{
《Windows系统编程》读后感(一)    DWORD i;
《Windows系统编程》读后感(一)    TCHAR t1, t2;
《Windows系统编程》读后感(一)    
int Result = 0;
《Windows系统编程》读后感(一)《Windows系统编程》读后感(一)    
for (i = 0; i < KSize && Result == 0; i++{
《Windows系统编程》读后感(一)        t1 
= *pKey1;
《Windows系统编程》读后感(一)        t2 
= *pKey2;
《Windows系统编程》读后感(一)        
if (t1 < t2)
《Windows系统编程》读后感(一)            Result 
= -1;
《Windows系统编程》读后感(一)        
if (t1 > t2)
《Windows系统编程》读后感(一)            Result 
= +1;
《Windows系统编程》读后感(一)        pKey1
++;
《Windows系统编程》读后感(一)        pKey2
++;
《Windows系统编程》读后感(一)    }

《Windows系统编程》读后感(一)    
return Revrs ? -Result : Result;
《Windows系统编程》读后感(一)}

《Windows系统编程》读后感(一)