Архив метки: Linux

Таймеры высокого разрешения Linux C/C++

В операционной системе Linux помимо обычных задержек(sleep) и таймеров, реализованы таймеры высокого разрешения. Таймер и задержки высокого разрешения позволяет измерять временные промежутки с точностью до наносекунд, а так же позволяют приложения «засыпать» на непродолжительное время(в зависимости от конфигурации системы) соизмеримое с несколькими микросекундами.


//===============================================================
// Name : HiTimer.c
// Author : D.Falko
// Version : 1.0
// Description : High Resolution timer test
//===============================================================
 
 
#include
#include
#include
#include
#include
#include
 
 
int main(int argc, char *argv[])
{
if(0 == geteuid()) // приложение должно быть запущенно с правами суперпользователя
{
struct sched_param sp;
memset(&sp, 0, sizeof(sp));
sp.__sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(0, SCHED_FIFO, &sp);
mlockall(MCL_CURRENT | MCL_FUTURE);
}
else
{
printf("Not running with superuser rigthsn");
exit(1);
}
if(argc < 3)
{
printf("Using: HiTimer iterations delayn");
exit(1);
}
 
int iter = atoi(argv[1]);
int delay = atoi(argv[2]);
 
int i=0;
struct timespec tS, startT, stopT;
 
clock_getres(CLOCK_MONOTONIC, &tS); // узнаем разрешение таймера
printf("Timer res: %ld sec, %ld nsecn", tS.tv_sec, tS.tv_nsec);
 
 
struct timespec time;
clock_gettime(CLOCK_MONOTONIC, &startT); // засекаем время начала теста
 
while(i<iter)
{ // повторяем iter раз задержку delay
i++;
clock_gett ime(CLOCK_MONOTONIC, &time); получаем актуальное время
time.tv_nsec+=delay; // добавляем требуемую задержку
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME,
&time, NULL); // засыпаем
}
clock_gettime(CLOCK_MONOTONIC, &stopT);
long int nsec=stopT.tv_sec*1000000000 + stopT.tv_nsec
-startT.tv_sec*1000000000 + startT.tv_nsec;

  // iter*delay должно примерно равняться nsec, узнаем погрешность задержек
printf("Number of iterations: %d timer value: %d nsecn",
iter, delay);
printf("Time elapsed: %ld nsecn", nsec);
 
 
return 0;
}
А теперь подробней о использованных компонентах.

Используемая структура времени определена в <sys/time.h> и выглядят следующим образом:

struct timespec {
long tv_sec; /* секунды */
long tv_nsec; /* наносекунды */
};
 
Далее мы узнаем и выводим на экран точность(разрешение) системных часов, при помощи функции:

int clock_getres(clockid_t clk_id, struct timespec *res);
в структуру struct timespec *res записывается разрешения, указанных в clockid_t clk_id часов.

clockid_t clk_id может быть:

CLOCK_REALTIME: часы реального времени, доступные всем процессам в системе. Часы измеряются в секундах и наносекундах с начала эпохи (то есть 00:00:00 1 января 1970 по Гринвичу). Точность 1/HZ секунд. 

CLOCK_MONOTONIC: время непрерывной работы ОС, доступное всем процессам. В Линукс оно измеряются  в секундах и наносекундах после загрузки ОС. Точность 1/HZ с. Время в этих часах не может быть изменено каким-либо процессом, по этому рек

Установка Mac OS X Lion для Ubuntu 12.04 и Linux Mint

Многие люди ищут тему Macbuntu 12.04/Macbuntu 12.10/Macbuntu 11.10/Mac4lin, Mac Ubuntu и так далее. Итак, здесь тема Mac OS X Lion для Ubuntu 12.04 Precise Pangolin и, надеюсь, эта тема будет работать с Linux Mint 13.

Новое:
Исправлено множество ошибок в теме и значках
Тема более гладкая, блестящая и быстрая
Исправлена проблема чувствительности индикатора выполнения
Исправлены кнопки Metacity
Исправлено соответствие цветов между верхней панелью и развернутым окном
Редизайн кнопок панели инструментов
Добавлено больше округлости для панели инструментов
Изменен цвет строк
Добавлен эффект слегка жирного шрифта при наведении на ячейки и строки
Эффект жирного шрифта при наведении на кнопки
Различные цвета панели поиска и панели мусора
Удалена граница rubber band
Удалена граница плавающей панели
Примечание

Во второй версии автор предоставляет 2 пакета значков:

Mac Lion

Mac Snow Leoprad

Подготовка

Шаг 1. Скачайте обои Mac OS X Lion

Шаг 2. Установите последний Cairo Dock

Нажмите правой кнопкой мыши на Cairo Dock > Выберите «Launch Cairo-Dock at Startup (Запускать Cairo-Dock при запуске системы)»

Шаг 3. Настройка полосы прокрутки: Установите Ubuntu Tweak, перейдите на вкладку «Miscellaneous (Разное)» и выключите «Overlay Scrollbars (Наложение полосы прокрутки)»

Шаг 4. Установите новый логотип Apple в лаунчер

Выполните следующие команды, чтобы установить логотип Apple:

wget -O apple-logo.zip http://dl.dropbox.com/u/53319850/NoobsLab.com/apple-logo.zip
sudo unzip apple-logo.zip -d /usr/share/unity/5/

Подтвердите замену файла и нажмите «Enter»

Если вы хотите вернуть логотип Ubuntu обратно, выполните в терминале следующие команды:

wget -O ubuntu-logo.zip http://dl.dropbox.com/u/53319850/NoobsLab.com/ubuntu-logo.zip
sudo unzip ubuntu-logo.zip -d /usr/share/unity/5/

Подтвердите замену файла и нажмите «Enter»

Установка

Шаг 5. Для установки темы Mac OS X Lion в Ubuntu 12.04/12.10/11.10 или Linux Mint, откройте терминал (Ctrl+Alt+T) и выполните следующие команды:

sudo add-apt-repository ppa:noobslab/themes
sudo apt-get update
sudo apt-get install mac-os-lion-cursors-v2
sudo apt-get install mac-os-lion-icons-v2
sudo apt-get install mac-os-lion-theme-v2

Шаг 6. Отключение отчета о сбоях

Обычно в Ubuntu 12.04 сбоев больше, чем в предыдущих версиях, поэтому вы можете отключить отчеты с помощью следующей команды:

sudo sed -i «s/enabled=1/enabled=0/g» ‘/etc/default/apport’

Шаг 7. Установка Compiz Setting Manager для автоматического скрытия лаунчера Unity

sudo apt-get install compizconfig-settings-manager

Шаг 8. Установка Gnome Tweak Tool/Ubuntu Tweak для изменения темы, значков, курсоров

sudo apt-get install gnome-tweak-tool

Также смотрите удаление белых точек с экрана входа

Данная новость подготовлена для Вас командой сайта lintux.ru
Источник: www.noobslab.com
Автор: Umair
Перевел: Максим Левиков

Автор: ГАЗЕНВАГЕН™

Артефакты, искажение изображения во FreeRDP

Я уже описывал установку FreeRDP в статье: «Устанавливаем FreeRDP на Ubuntu» , также описывал примеры и параметры. Теперь пришло время описывать исправление ошибок.

Столкнулся с искажением изображения при подключении и работе на сервер терминалов windows. Проблема пропала при шаманстве с видео картой, так и Читать

Автозапуск скриптов в Ubuntu при инициализации системы

Cтолкнуться с необходимостью добавления скрипта в автозагрузку системы. Добавление его в rc.local не сработало, вернее работало не так как хотелось. Как сделать простой скрипт и добавить его запуск при инициализации системы расскажу ниже.  Читать

Настраиваем микрофон в Skype (Linux,Ubuntu)

Как же настроить микрофон в Skype. Если установка программы не вызывает особых трудностей, то у многих отказывается работать микрофон. Читать

linux: почему же ELF interpreter в Arch Linux 64 линкуется в /lib

Как-то однажды я собрал программу в своём 64-битном Arch Linux и отдал бинарник, а оно берёт и не работает. Пишет:

/lib/ld-linux-x86-64.so.2: bad ELF interpreter: Нет такого файла или каталога

Ну, долго тут думать не пришлось — оказался странным путь для ld-linux-x86-64. Я не понял как оно должно быть по LSB, но во всех тестируемых системах ld-linux-x86-64.so.2 ищется в /lib64.
Fedora 17:

$ whereis ld-linux-x86-64.so.2
ld-linux-x86-64.so: /lib64/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2

Arch Linux:

$  whereis ld-linux-x86-64.so.2
ld-linux-x86-64.so: /lib/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2

В генту lib это ссылка на lib64.
Причём, в арче в lib64 кроме двух ссылок на соответствующие файлы в lib больше ничего нет:

$ ls /lib64
ld-2.15.so  ld-linux-x86-64.so.2


Короче, как ясно, интерпретатор находится и в lib и в lib64. То есть будет работать и так и так. Но при линковке на моей машине у меня связывается напрямую в lib, так что нигде больше не работает:

$ ldd ./myprogram
...
 /lib/ld-linux-x86-64.so.2 (0x00007f4b4ea70000)
...

Это печально, ну а что делать. Решил проблему временно с помощью patchelf:

patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 ./myprogram

Всё стало прекрасно. На этот счёт девелопер (?) сказал:

Historically, we were a pure 64-bit distro (multilib is a more recent thing), so the distinction of /lib v. /lib64 didn’t make sense for us.

Автор: Дмитрий