Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
perror("Failed to execute ls!");
return -1;
}
while(!feof){ //Пока потомок работает
fgets(buf, 1024, f); //Читаем из канала
printf("%s", buf);
}
pclose(f); //Закрываем канал
return 0;
}
В форуме журнала был вопрос, связанный с поиском файлов в UNIX. Одним из решений может служить взаимодействие со стандартной утилитой find при помощи функции popen("find some_file", "r"). В качестве альтернативы можно также использовать команды locate и whereis.
Во многих UNIX-подобных системах (в частности в Linux) организована поддержка нитей. К сожалению, возможность эта ещё пока недостаточно отлажена и использовать её не так-то просто. Но я, тем не менее, расскажу об основных принципах создания нитей в UNIX. Нити в UNIX представляют собой особый вид процессов и создание нити очень похоже на вызов fork. Для создания нити необходимо применять функции библиотеки pthread. Для каждого потока схема создания следующая: инициализация атрибутов нити, создание нити, уничтожение нити и уничтожение её атрибутов.
int pthread_attr_init(pthread_attr_t *a)
– установка атрибутов по умолчанию в структуре a. Далее можно устанавливать приоритет потока и другие его атрибуты функциями, специальными для каждого атрибута (таких функций 5 пар, отвечающих за включение и выключение отдельных атрибутов).
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void * (*start_func)(void *), void *arg)
– создаёт нить с атрибутами attr на основе функции start_func и передающей этой функции параметры arg типа void * (здесь всё, как и в WinNT). Если создание нити прошло удачно, функция возвращает 0, а поле thread заполняется идентификатором потока.
int pthread_join(pthread_t thread, void **retval)
– данный поток приостанавливает своё исполнение и ждёт завершения потока thread, который заполняет поле retval.
void pthread_exit(void *retval)
– завершает текущий поток и записывает результат выхода retval.
int pthread_attr_destroy(pthread_attr_t *attr)
– очистка структуры атрибутов нити.
Итак, приведу простенький пример создания нити в Linux.
#include <pthread.h>
void *thread_func(void *arg)
{