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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по нитям, Ошибка при компилировании программы 
:(
    Опции темы
Roman2010
Дата 9.4.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Друзья,подскажите пожалуйста с чем связана руготня компилятора и как это разрешить?

Код

#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

void *my_write(void *arg);
void *my_read(void *arg);

int main()
{  
    pthread_t thread1;
    pthread_t thread2;
    pid_t childpid;
    (void)umask(0);
    if (mknod("FIFO", S_IFIFO | 0666, 0) < 0)
    {
        printf("Can\'t create FIFO\n");
        exit(-1);
    }
    printf("FIFO created success!\n");
    if ((childpid = fork()) == -1)
    {
       printf("Can\'t fork child\n");
       exit(-1);
    }
    if (childpid > 0)
    {  
       pthread_create(&thread1, NULL, &my_write, NULL);
       pthread_join(thread1, NULL);
    }
    else
    {
       pthread_create(&thread2, NULL, &my_read, NULL);
       pthread_join(thread2, NULL);
    }

    return 0;
}

void *my_read(void *arg)
{
     size_t size;
     char readbuffer[14];
     int fd; 
     if ((fd = open("FIFO", O_RDONLY)) < 0)
     {
        printf("Can\'t open FIFO for reading\n");
        exit(-1);
     }
     size = read(fd, readbuffer, 14);
     if (size < 0)
        {
           printf("Can\'t read string\n");
           exit(-1);
        }
     printf("Read successfully!\n");
     printf("\n%s\n", readbuffer);
     close(fd);
}
void *my_write(void *arg)
{
    size_t size;
    int fd; /* Объявление переменной - дескриптора FIFO */

    if ((fd = open("FIFO", O_WRONLY)) < 0)
    {
       printf("Can\'t open FIFO for writing\n");
       exit(-1);
    }
    size = write(fd, "_____________", 14);
    if (size != 14)
    {
       printf("Can\'t write all string to FIFO\n");
       exit(-1);
    }
    close(fd);
}



Компилятор выдаёт следующее :

/tmp/ccUK8M0M.o(.text+0xa9): In function `main':
5.c: undefined reference to `pthread_create'
/tmp/ccUK8M0M.o(.text+0xba):5.c: undefined reference to `pthread_join'
/tmp/ccUK8M0M.o(.text+0xd1):5.c: undefined reference to `pthread_create'
/tmp/ccUK8M0M.o(.text+0xe2):5.c: undefined reference to `pthread_join'
collect2: ld returned 1 exit status


PM MAIL   Вверх
MAKCim
Дата 9.4.2009, 19:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Roman2010
-lpthread

 smile 
ребята, ну научитесь уже наконец пользоваться гуглом
достаточно в запросе набрать "undefined reference to `pthread_join'"


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Бывалый
*


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

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



Надо эту тему распиарить, а то в гугле она не на первом месте  smile 
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
Roman2010
Дата 9.4.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim
Спасибо! smile 
PM MAIL   Вверх
Roman2010
Дата 13.5.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Друзья,подскажите в чём ошибка???
Вот значит есть такая программа с анализированием работы на время....Но на выходе всегда выдаёт что "Work time: 0" .Неужели она так быстро работает?Как сделать так что бы на выходе хоть что то было...?
Код

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <sys/times.h>
void *childFunc(void *dummy)
{
int fileDes;
pthread_t childThread;
size_t size;
char str[14]; 
childThread = pthread_self();
printf("Child process try opening FIFO\n");
fileDes = open("fifo4", O_RDONLY);
if(fileDes < 0)
    {
    printf("FIFO not opened for reading! Error %s\n", strerror(errno));
    exit(-1); 
    } 
printf("Try read from FIFO...\n");
size = read(fileDes, str, 14);
if(size < 0)
    {
    printf("Can not read from FIFO. Error %s\n", strerror(errno)); 
    exit(-1); 
    } 
printf("Read successfully!\n");
printf("Result of reading is \"%s\"\n",str);
close(fileDes);
printf("Child process closed successfully!\n");
return NULL;
}
int main()
{
clock_t st_time;
clock_t end_time;
struct tms st_cpu; 
struct tms end_cpu;
mode_t mode = S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH;
pthread_t parentThread, childThread;
int fileDes, result; 
size_t size;
char str[14]; 
if (mkfifo("fifo4", mode) < 0)
    {
    printf("Error when create fifo (%s)\n", strerror(errno));
    exit(-1);
    }
printf("FIFO created success!\n");
st_time = times(&st_cpu);
result = pthread_create(&childThread, (pthread_attr_t *)NULL, childFunc,NULL);
if (result !=0)
    {
    printf("Error on thread create, Error is %s\n",strerror(result));
    exit(-1);
    }
parentThread = pthread_self();
printf("Parent process try opening FIFO\n");
fileDes = open("fifo4", O_WRONLY);
if (fileDes < 0)
    {
    printf("FIFO not opened for writing! Error %s\n", strerror(errno));
    exit(-1);
    }
printf("Try wtite in FIFO...\n");
size = write(fileDes, "Hello,world!", 14);
if(size != 14)
    {
    printf("Can not write to FIFO\n");         
    exit(-1); 
    } 
printf("Write successfully!\n");
close(fileDes);
pthread_join(childThread, (void *)NULL);
printf("Parent process closed successfully!\n");
end_time = times(&end_cpu);
printf("Work time: %d\n",
((end_time - st_time)));
return 0; 
}





PM MAIL   Вверх
MAKCim
Дата 13.5.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Roman2010
на моей системе (2.6.27.7, x86-64) частота изменения clock_t - 100, т. е 10мс
за 10мс вполне может быть создан процесс, ему передано управление и осуществлено чтение из пайпа


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Roman2010
Дата 13.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim,а как мне сделать чтобы на выходе был хоть какой-то временной результат,только ненулевой?...Чтобы я мог сравнить эту программу реализуя её с помощью нитей и без для сравнения результатов...
PM MAIL   Вверх
MAKCim
Дата 13.5.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Roman2010
записывай и читай из пайпа больше данных
а вообще зависит от того, скорость чего ты хочешь сравнить


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Новичок



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

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



MAKCim,
Я хочу сравнить время работы программы реализованной с помощью нитей и без них
PM MAIL   Вверх
MAKCim
Дата 14.5.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Roman2010
покажи вариант без потоков


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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