winapi : ReadFile - ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ Àд´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : ¸Þ´º¾ó>winapi>ReadFile



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ReadFile

Ư¼ö ÆÄÀÏ È¤Àº ÀÔÃâ·Â ÀåÄ¡·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àд´Ù.

ÀÌ ÇÔ¼ö´Â µ¿±â, ºñµ¿±â ¸ðµÎ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ºñµ¿±â·Î¸¸ »ç¿ëÇÒ ¼ö ¾Æ¾¾´Â ÇÔ¼ö·Î ReadFileExÇÔ¼ö°¡ ÀÖ´Ù.

»ç¿ë¹ý

BOOL WINAPI ReadFile( 
  __in         HANDLE hFile, 
  __out        LPVOID lpBuffer, 
  __in         DWORD nNumberOfBytesToRead, 
  __out_opt    LPDWORD lpNumberOfBytesRead, 
  __inout_opt  LPOVERLAPPED lpOverlapped 
); 
 

¸Å°³ º¯¼ö

  • hFile
    ÆÄÀÏ, ÆÄÀÏ ½ºÆ®¸², ¹°¸®µð½ºÅ©, Å×ÀÌÇÁ µå¶óÀ̺ê, ¼ÒÄϰú °°Àº ÀåÄ¡ÀÇ ÇÚµé.

    hFile ¸Å°³ º¯¼ö´Â ¹Ýµå½Ã read ±ÇÇѰú ÇÔ²² ¸¸µé¾î¾ß ÇÑ´Ù. ºñµ¿±â Àб⸦ ¿øÇÑ´Ù¸é CreateFileÇÔ¼ö, socket ȤÀº acceptÇÔ¼ö·Î ÆÄÀÏÀ» »ý¼ºÇÒ ¶§ FILE_FLAG_OVERLAPPEDÇ÷¡±×¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
  • lpBuffer
    ÆÄÀÏÀ̳ª ÀåÄ¡·Î ºÎÅÍ ¹ÞÀº µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ ¹öÆÛ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ
  • nNumberOfBytesToRead
    ÀÐÀ» ÃÖ´ë ¹ÙÀÌÆ® Å©±â
  • lpNumberOfByteRead
    µ¿±â ÀÔÃâ·Â ¸ðµå¿¡¼­, ÀоîµéÀÎ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ³Ñ±ä´Ù.
  • lpOverlapped
    ºñµ¿±â ÀÔÃâ·ÂÀ» À§ÇÑ OVERLAPPED ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ. hFileÀÌ FILE_FLAG_OVERLAPPED Ç÷α׷Π¿­·È´Ù¸é, ¹Ýµå½Ã ÀÌ ±¸Á¶Ã¼¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ºñµ¿±â ÀÔÃâ·ÂÀÌ ¾Æ´Ï¶ó¸é NULLÀ» »ç¿ëÇÑ´Ù.

¹Ýȯ °ª

¼º°øÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù.

ÇÔ¼ö°¡ ½ÇÆÐÇÒ¶§ ȤÀº ºñµ¿±â ÀÔÃâ·ÂÀ» ¿Ï·áÇßÀ» ¶§µµ 0À» ¹ÝȯÇÑ´Ù. ÀÚ¼¼ÇÑ ¿¡·¯ °ªÀº GetLastErrorÇÔ¼ö·Î È®ÀÎ ÇÒ ¼ö ¾Æ¾¾´Ù.

GetLastError Äڵ尡 ERROR_IO_PENDINGÀ̸é, ½ÇÆÐ°¡ ¾Æ´Ï´Ù. À̰ÍÀº ºñµ¿±â ÀÔÃâ·ÂÀÌ ¿Ï·áµÇ¾úÀ½À» ÀǹÌÇÑ´Ù.

»ó¼¼ ¼³¸í

ReadFileÇÔ¼ö´Â ¾Æ·¡ÀÇ ÀÌÀ¯·Î ¹ÝȯÇÑ´Ù.
  • µ¥ÀÌÅ͸¦ Àоú´Ù.
  • ÆÄÀÌÇÁ¿¡ ¾²±â°¡ ¿Ï·áµÇ¾ú´Ù.
  • ºñµ¿±â Çڵ鷯°¡ »ç¿ëµÇ°í, ºñµ¿±â ÀÔ·ÂÀÌ ¹ß»ýÇßÀ» ¶§
  • ¿¡·¯ÀÇ ¹ß»ý
ReadFileÇÔ¼ö°¡ ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇϸé 0À» ¹ÝȯÇϰí GetLastErrorÇÔ¼ö´Â ERROR_HANDLE_EOF¸¦ ¹ÝȯÇÑ´Ù.

¿¹Á¦

ÇÁ·Î±×·¥ ½ÇÇàÀÎÀÚ·Î ÁÖ¾îÁø ÆÄÀϸíÀ» ¿­¾î¼­ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù.
001  #include <stdio.h> 
002  #include <windows.h> 
003   
004  #define MAX_LINE 1024 
005  int main(int argc, char **argv) 
006  { 
007      HANDLE fp; 
008      DWORD readn; 
009      BOOL brtv; 
010      char buf[MAX_LINE]; 
011   
012      if (argc != 2) 
013      { 
014          printf("Usage : %s [file]\n", argv[0]); 
015          return 1; 
016      } 
017   
018      fp = CreateFile( 
019          (LPCTSTR)argv[1],  
020          GENERIC_READ, 
021          0, 
022          NULL, 
023          OPEN_EXISTING, 
024          FILE_ATTRIBUTE_NORMAL, 
025          NULL); 
026      if (fp == INVALID_HANDLE_VALUE) 
027      { 
028          printf("File 1 Open Error (%d) : %s\n", GetLastError(), argv[1]); 
029          return 1; 
030      } 
031   
032      while(1) 
033      { 
034          memset((void *)buf, 0x00, MAX_LINE);
035          brtv = ReadFile(fp,buf, MAX_LINE-1, &readn, NULL); 
036          if(brtv && readn == 0) 
037          { 
038              break; 
039          } 
040          printf("%s", buf); 
041      } 
042      return 1; 
043  } 
044  


EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.