[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    Он в 90% случаев равен NULL. Этот параметр определяет возможность наследования дескриптора другим процессом.

    если оперируем еще и с параметром lpSecurityDescriptor, то можно настроить еще и права доступа.
     
    #1621 4p3, 24 Sep 2008
    Last edited: 24 Sep 2008
  2. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Еще вопрос по С. Можно ли как нибудь сделать так, чтобы цикл while выполнялся до тех пор, пока пользователь не нажмет ctrl+c? Если да, то как?
     
  3. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    если это консольное приложение под windows то при нажатии Ctrl-C оно автоматически завершит свою работу. Перехватить нажатие Ctrl-C можно с помощью функции API SetConsoleCtrlHandler.
     
  4. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    #1624 Jes, 24 Sep 2008
    Last edited: 24 Sep 2008
    1 person likes this.
  5. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Данные с помощью ReadFile из бинарного файла,в цикле читаются в массив размером в 10мбайт.Вопрос вот в чем почему число которое возвращает sizeof(массив) не совпадаtn со значением которое возвращает ReadFile в lpNumberOfBytesRead ??
     
  6. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297

    Т.е. ReadFile прочла меньше, чем должна была? Значит произошла к-либо ошибка. А сама функция что вернула (true/false)? Проверь с GetLastError что за ошибка возникла.
     
  7. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    nNumberOfBytesToRead совпадает с возвращаемым значением в lpNumberOfBytesRead.А вот sizeof от буфера куда оно прочиталось возвращяет погоду на Марсе :mad: И
    GetLastError 0 возвращяет.
     
  8. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    код в студию.
     
  9. neprovad

    neprovad Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    899
    Likes Received:
    274
    Reputations:
    59
    Это Дэнвер, погода летная, даю добро на старт.
    Вообще приводить надо бы весь код, от выделения памяти до GetLastError. А то мы тут все будем до второго пришествия гадать что это - нехватка озу, сбой в ос, неверное выделение памяти, кривая передача указателя функции чтения.
     
  10. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Code:
    char *fnam=new char[1024*10];
    char *ip=new char[1024];
    CRITICAL_SECTION cs;
    void thr(void *Pvoid)
    {
    SOCKET s;SOCKADDR_IN adr;DWORD rb;unsigned long ss,sz;int p=1;
    //WSADATA wsd;WSAStartup(MAKEWORD(1,1),&wsd);
    adr.sin_family=AF_INET;
    adr.sin_port=htons(3060);
    InitializeCriticalSection(&cs);
    EnterCriticalSection(&cs);
    adr.sin_addr.s_addr=inet_addr(ip);
    LeaveCriticalSection(&cs);  
    s=socket(AF_INET,SOCK_STREAM,0);
    connect(s,(sockaddr*)&adr,sizeof(adr));SetLastError(0);
    HANDLE f=CreateFile(fnam,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0);
    char *buf=new char[(1024*1024)*10];
    DWORD e=GetFileSize(f,&ss);
    if(e>0){sz=e;}if(e<1){sz=ss;}
    if(sz<(1024*1024)*10)
    {ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);}
    if(sz>(1024*1024)*10)
    {
    for(;;)
    {
    ReadFile(f,buf,(1024*1024)*10,&rb,0);
    MessageBox(0,CurrToStr((int)rb).c_str(),"!!!",MB_OK);
    MessageBox(0,CurrToStr((int)sizeof(buf)).c_str(),"!!!",MB_OK);
    MessageBox(0,CurrToStr((int)GetLastError()).c_str(),"!!!",MB_OK);
    sz=sz-(1024*1024)*10;send(s,buf,rb,0);
    memset(buf,NULL,(1024*1024)*10);
    SetFilePointer(f,((1024*1024)*10)*p,NULL,FILE_BEGIN);p++;
    if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);break;}
    }
    }
    }
    
     
  11. FrMn

    FrMn Elder - Старейшина

    Joined:
    8 Aug 2008
    Messages:
    51
    Likes Received:
    16
    Reputations:
    7
    дык buf - это указатель. он занимает 4(8) байтов. подробней - читай МСДН по поводу sizeof(). вот исчо исходник там есть в качестве примера
     
  12. horlyk

    horlyk Elder - Старейшина

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    В общем ошибка такая:

    error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

    когда убрал _t и оставил просто main, то ошибка исчезла.
    При компиляции ошибок небыло, а вот при дебаге или запуске...
    спс за помощь :)
     
  13. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    ну если sizeof() неподходит ,то что вместо него использовать?
     
  14. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    horlyk
    #include "stdafx.h" убери и в настройках отключи.
     
    1 person likes this.
  15. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Вот невезет ведь :( пытаюсь использовать вместо sizeof _msize и получаю
    Code:
    [Linker Error] Error: Unresolved external '__msize' referenced from C:\COD\CD\APP\UNIT1.OBJ
    
     
  16. horlyk

    horlyk Elder - Старейшина

    Joined:
    2 Dec 2007
    Messages:
    132
    Likes Received:
    6
    Reputations:
    0
    отключил еще при первой компиляции :) меня сразу выругало за stdafx.
    спс :)
     
  17. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    Зачем вообще тут sizeof? Я чего-то недопонимаю? Точное количество записанных в buf байт в переменной rb. Зачем извращать-то там, где не надо? Что мешает это значение использовать?

    Code:
    if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,strlen(buf),0);break;}
    }
    
    strlen(buf) - тоже самое. Зачем, когда rb уже содержит нужное значение?

    Code:
    if(sz<(1024*1024)*10){ReadFile(f,buf,sz,&rb,0);send(s,buf,rb,0);break;}
    }
    
    Да и потом strlen может херню вернуть ибо вы пишите

    http://www.cplusplus.com/reference/clibrary/cstring/strlen.html

    У тебя ноль где-нибудь в середине буфера будет и будет не айс ведь. половину только отошлешь
     
    #1637 0x0c0de, 25 Sep 2008
    Last edited: 25 Sep 2008
  18. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Да с отправкой я уже давно разобрался.Просто проблема с приемом ведь в последнем куске по любому прийдет не (1024*1024)*10 байт а меньше.Вот и надо как то определить сколько при приеме последнего куска в буфере оказывается. :(
     
  19. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    2_nic

    http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx

    У тебя recv вернет количесво принятых байт.
     
  20. VIP

    VIP Elder - Старейшина

    Joined:
    29 Dec 2004
    Messages:
    104
    Likes Received:
    3
    Reputations:
    0
    ? по С

    Почему не компилируется?

     
Thread Status:
Not open for further replies.