Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где взять *.h файлы. 
:(
    Опции темы
nasan
Дата 26.4.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Привет. У меня есть исходник программы но он не компилируется. пишет что не существует termios.h и pthread.h файлов. Я нашел их в нете но теперь компилятор выдает еще больше ошибок. Где взять эти 2 файла?

PM MAIL   Вверх
JackYF
Дата 26.4.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Мдя. Телепатов нет, сколько можно повторять...
Операционная система, среда?
Кусок исходника?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 26.4.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(nasan @  26.4.2007,  18:12 Найти цитируемый пост)
ermios.h и pthread.h

это unix библиотеки.  У тебя то какая система? и что за исходник?
PM MAIL WWW   Вверх
mr.Anderson
Дата 26.4.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



У меня автомобиль не заводится, не подскажете, в чем проблема? Из той же линейки вопросов.

P.S. сорри за оффтопик.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
nasan
Дата 26.4.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Программа типа чата. работаю в Виндовсе.


Код


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>
#include <pthread.h>
#include <signal.h>
#include <fcntl.h>


#define MAX_TEXT_SIZE 1024
#define MAX_NAME_SIZE 32

#define true 1
#define false 0

#define USE_ECHO 0  /
char myName[MAX_NAME_SIZE]="";  /*User name>*/
char myMessage[MAX_TEXT_SIZE];   /**/

char *lockFile="//tmp//default.lock"; /*A shared directory 
char *messageFile="//tmp//default.message.dat"; /*A shared directory is suitable for real usage*/
char *openMessengersCommandLine="ps -edf|grep messenger| grep -v grep|tr -s ' ' | cut -d \" \" -f 2";

pthread_mutex_t sendMessageMutex; 

int received;

void StartListening(void);  

int set_raw_mode(int echo) 
{
    int fd = STDIN_FILENO;
    struct termios t;

    if (tcgetattr(fd, &t) < 0)
    {
        perror("tcgetattr");
        return -1;
    }
    if (echo)
        t.c_lflag &= ~(ICANON); 
    else
        t.c_lflag &= ~(ICANON|ECHO); 
    if (tcsetattr(fd, TCSANOW, &t) < 0)
    {
        perror("tcsetattr");
        return -1;
    }
    setbuf(stdin, NULL);
    return 0;
}


int InitUserName(int argc,char *argv[]) /*Check user name*/
{
    if (argc<2) /*Check that a name is passed to the program*/
    {
        printf("Giv'me your name!\n");
        return 1; 
    }
    if (strlen(argv[1])+2>MAX_TEXT_SIZE) /*Test that name is not too long*/
    {
        printf("You've got a long name!\n");
        return 1; 
    }
    strcpy(myName,argv[1]);
    strcat(myName,">"); /*Add a prompt to the user name*/
    return 0;
}

char GetKey() /*Read a keyboard input*/
{
    char c;
    return((read(0, &c, 1) > 0) ? c: 0);
    //return 0;
}

void GetLock(char *lockName) /*Use a file as a lock*/
{
    int d,cpt=0;
    d=-1;
    while (d==-1) {
        d=open(lockName, O_WRONLY | O_CREAT | O_EXCL);/*O_EXCL: Refuse opening a file if already open*/
        cpt++;
        sleep(0); /*A delay is suitable here, but the sleep function only handles seconds...*/
    }
    close (d);
}

void ReleaseLock(char *lockName) /*Release the lock*/
{
    char command[MAX_TEXT_SIZE];
    sprintf(command,"rm %s>/dev/null",lockName);/*Creates a command name. Output redirected to /dev/null*/
    FILE *p=popen(command,"w");/*Call the command*/
    if (p!=NULL) 
    {
        fflush (p);
        pclose(p);
    }
}

void WriteMessage(char *message, int eraseLine, int goToLine) 
{
    /*lock screen here*/
    int i;
    if (eraseLine)
        for(i=0;i<MAX_TEXT_SIZE/8;i++)
            printf("\b\b\b\b\b\b\b\b");/*Erase last line. Maximum size line supposed to be MAX_TEXT_SIZE*/
    printf("%s",message);
    if (goToLine)
        printf("\n\n");
    fflush(stdout);
    /*unlock screen here*/
}

void SendMessageToPeers(char *message)   /*Function called when enter is pressed*/
{
    FILE *f;
    char s[2048];
    int pid;

    GetLock(lockFile); /*Only a process at a time can send to other processes*/
    f=fopen(messageFile,"w");  /* Start writing pid + message into a temporary file for Inter process communication. Very simple*/
    fprintf(f,"%d %s",getpid(),message);
    fclose(f);  /*pid + message written*/
    f=popen(openMessengersCommandLine,"r");  /*Get the pids of all the programs named Messenger*/
    if (f==NULL)
    {
        ReleaseLock(lockFile);
        perror("error popen\n");
        exit(1);
    }
    while (!feof(f))  /*Loop on all the pids, including itself*/
    {
        pid=fscanf(f,"%s\n",s); /*Read a single pid*/
        if (pid!=-1) 
        {    /* a pid has been read*/
            sscanf(s,"%d",&pid);  /*Converts pid string to integer*/
            received=false;        /*Will be set to 1 when the receiver send a signal to acknowledge reception*/
            int ret_val=kill(pid,SIGUSR1); /*Sends a message to another Messenger process*/
            if (ret_val==0) /*Signal sending is ok*/
                while(!received) 
                    sleep(0);  /*A few milliseconds would be best*/
        }
    }
    fclose (f); /*Close the pipe*/
    ReleaseLock(messageFile); /*Actually just for deleting the message. No lock functionality here*/
    ReleaseLock(lockFile);/*Release the lock*/
}

void SendMessageThread()
{
    char message[MAX_TEXT_SIZE];
    strcpy(message,myName);  
    strcat(message,myMessage);    /*Appends message to user name*/
    myMessage[0]=0;                /*Re-initializes inputted text*/
    SendMessageToPeers(message);/*CreateThread() here instead*/
}

void KeyboardInputManager()  /*loop to get inputted characters from the user*/
{
    char key;
    int l;

    while (1) 
    {
        key=GetKey();
        switch (key) {
            case 0:
                break;
            case 10:  /*Send Message to processes*/
                
                SendMessageThread();
                break;
            case 27: /*Escape key*/ 
                raise(SIGINT);
            default:
                l=strlen(myMessage)/*+strlen(myName)*/;
                if (l<MAX_TEXT_SIZE-1)
                {
                    myMessage[l]=key;
                    myMessage[l+1]=0;
                    if (!USE_ECHO)
                    {
                        printf("%c",key); /*Need to display the inputted character if echo has been disabled*/
                        fflush(stdout);
                    }
                }
                break;
        }
    }
}

void Listening(int sig)
{
        char message[MAX_TEXT_SIZE];
        int pid;
        int nbRead;
        FILE *f;

        switch (sig) {
             case SIGUSR1:
                f=fopen(messageFile,"r");
                fscanf(f,"%d ",&pid);
                nbRead=fread(message,1,MAX_TEXT_SIZE,f);
                message[nbRead]=0;
                fclose(f);
                WriteMessage(message,true,true);
                WriteMessage(myMessage,false,false);
                sleep(0);
                kill(pid,SIGUSR2);
                break;
            case SIGUSR2:
                received=true;
                break;
        }
}

void StartListening(void)
{
    signal(SIGUSR1,Listening);
    signal(SIGUSR2,Listening);
}

int main(int argc, char* argv[])
{
    if (InitUserName(argc,argv)) /*Check that argv[1] is valid and copy Name to myName variable*/
        exit(1);
    set_raw_mode(USE_ECHO);
    StartListening();   
    KeyboardInputManager();
    return 0;
}




PM MAIL   Вверх
nerezus
Дата 26.4.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



nasan, ну для начала стоит поставить Linux. Ну или фряху.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
JackYF
Дата 27.4.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Итак, как уже было замечено раньше, этот исходник предназначен для Линукса и ему подобных. И требует Юниксовые библиотеки.
Поэтому нигде, кроме как на unix-системах, ты этот исходник не запустишь.

Ищи другой пример.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 27.4.2007, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(JackYF @  27.4.2007,  02:11 Найти цитируемый пост)
Поэтому нигде, кроме как на unix-системах, ты этот исходник не запустишь.

можно попробовать собрать под cygwin...
PM MAIL WWW   Вверх
Hurricane
Дата 27.4.2007, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 10.4.2007

Репутация: 6
Всего: 9



Или портировать. Портировав нужные библиотеки или переписав ввод-вывод под консоль или API...

Где-то мне попадался порт терминальной библиотеки под винды, но это было так давно, что уже не вспомню. Или это была ncurses...

А вот pthread точно виндовая есть, но насколько она одинакова с *NIX'ом - не знаю, я с ней не работал.


Это сообщение отредактировал(а) Hurricane - 27.4.2007, 01:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.