пятница, 25 сентября 2015 г.

четверг, 17 июля 2014 г.

Полезные статьи на Хабре

Как узнать прогресс исполнения команды dd

Когда я начал активно использовать команду dd, меня стало сильно напрягать отсутствие какой-либо индикации выполнения команды. Кроме того, хотелось узнать, а долго ли еще ждать.

Оказалось, нужно внимательно читать help:

$ dd if=/dev/zero of=/dev/null&
[1] 6826
$ kill -USR1 6826
43492667+0 records in
43492667+0 records out
22268245504 bytes (22 GB) copied, 19,1004 s, 1,2 GB/s

или в общем случае:

$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

вторник, 15 июля 2014 г.

Простой демон

Функция создания демона

int daemonize()
{
 int pid = fork();
 if (pid == -1) // ошибка
 {
  printf("Start Daemon Error: %s\n", strerror(errno));
  return 1;
 }
 else if (!pid) // если это потомок
 {
  umask(0);
  setsid();
  chdir("/");
  close(STDIN_FILENO);
  close(STDOUT_FILENO);
  close(STDERR_FILENO);
  return 0;
 }
 else // если это родитель
 {
  // завершим процесс
  exit(0);
 }
 
}

Использование

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>

int main(int argc, char** argv)
{
 //Создаем из процесса демона
 int res = daemonize();
 if(res)
  return -1;
 
 //Основной код программы ...
 return 0;
}

вторник, 3 декабря 2013 г.

Работа с COM портом в Linux

Инициализация COM порта

COM порт в Linux представляет собой файл устройства. Типичное расположение такого файла
\dev\ttySx для обычного COM порта или \dev\ttyUSBx для
USB-RS переходника, где x = 0,1,2...
Встречаются также \dev\ttyOSx и др.
Для начала работы COM порт необходимо открыть:
int F_ID = -1;
open("\dev\ttyUSB0", O_RDWR | O_NOCTTY);
if(F_ID == -1)
{
    std::cout << strerror(errno) << std::endl;
}
Если F_ID отличается от -1, значит COM порт открыт успешно
и можно переходить к его настройке.
Чтение текущих настроек:
struct termios options; /*структура для установки порта*/
tcgetattr(F_ID, &options); /*читает пораметры порта*/
Установка скорости:
cfsetispeed(&options, B57600); /*установка скорости порта*/
cfsetospeed(&options, B57600); /*установка скорости порта*/
Установка таймаутов чтения:
options.c_cc[VTIME]    = 20; /*Время ожидания байта 20*0.1 = 2 секунды */
options.c_cc[VMIN]     = 0; /*минимальное число байт для чтения*/
Установка других полезных (необходимых) параметров:
options.c_cflag &= ~PARENB; /*бит четности не используется*/
options.c_cflag &= ~CSTOPB; /*1 стоп бит */
options.c_cflag &= ~CSIZE;  /*Размер байта*/
options.c_cflag |= CS8;  /*8 бит*/
    
options.c_lflag = 0;
options.c_oflag &= ~OPOST; /*Обязательно отключить постобработку*/
 
options.c_iflag = 0;
options.c_iflag &= ~ (INLCR | IGNCR | ICRNL);
Сохранение параметров:
tcsetattr(F_ID, TCSANOW, &options);

Чтение и отправка данных

Прочитать данные из COM порта:

пятница, 29 ноября 2013 г.

Кино для консольщиков

Очередное подтверждение, что Linux очень весёлая вещь
$ gst-launch-1.0 filesrc location=SomeMovie.avi ! decodebin! aasink
где SomeMovie.avi - любой фильм

отсюда: habrahabr.ru/post/204014/

понедельник, 25 ноября 2013 г.

NFS сервер в Ubuntu

Устанавливаем необходимые пакеты
 $ sudo apt-get install nfs-kernel-server nfs-common
Редактируем конфигурационный файл
$ sudo gedit /etc/exports
Добавляем в конце файла нечто подобное
/data 192.168.4.0/255.255.252.0(ro,insecure,sync,no_subtree_check)
Перезапускаем сервер
$ sudo /etc/init.d/nfs-kernel-server restart
При дальнейших изменениях можно не перезапускать сервер, а выполнить
$ sudo exportfs -a

см. также
http://help.ubuntu.ru/wiki/nfs
man exports