LINUX.ORG.RU

Сообщения CL

 

вычисление значений

#define CHISLO1 5
#define CHISLO2 (5+3)
#define CHISLO3 (CHISLO2+12)

int i=CHISLO1+5;
if(i==CHISLO3){}
Подскажите когда будут вычисляться эти значения в процессе компиляции или каждый раз в процессе выполнения программы.

CL
()

вопросы про com port и lpt

как определить в программе на языке Си, что записанные в ком. порт (в буффер ком порта) данные выданы полностью.
И еще один вопрос есть ли какие нибудь стандартные команды для определения статуса принтера через порт lpt (включен, есть ли бумага) или для каждого принтера свои команды.

CL
()

реализация таймеров

Посоветуйте как в программе на С реализовать таймеры.
Таймер не должен быть супер точным +-2 секунды не критично.
Проблема в том что таймеров может быть много,
и их процессе работы программы нужно запускать или останавливать.
Я пробовал делать через текущее время: разница между сохраненным
заначением в ф-цией time(NULL).
Но возможно изменение текущего времени после чего моя реализация
сходит с ума.
Как интересно данная задача реализованна в библиотеках Gtk или Qt.

CL
()

поля в структуре

Приветствую.
struct _MyStruct
{
int val1;
int val2;
int val3;
};

typedef struct _MyStruct MyStruct;

main()
{
MyStruct *mst;
int i;

mst=malloc(sizeof(MyStruct));
mst->val1=1;
mst->val2=2;
mst->val3=3;

i=mst->val3;
}
возможно ли к полю val3 обратиться не i=mst->val3, а как нибудь по положению
поля в структуре (что нибудь типа i=&(mst+8)), причем +8 тоже както нужно вычислить.
Попробую по другому обьяснить проблему:
Функция работает со значением в каком либо поле структуры, причем поля могут быть различные
(либо val1, либо val2, либо val3, ...) возможно ли указать этой функции с каким полем работать
но не так:
if(name_field==1)i=mst->val1;
else if(name_field==2)i=mst->val2;
else i=mst->val3;
т.к. полей в структуре очень много и они имеют различные типы.

CL
()

warning на функцию div

например есть такой код:

#include 

int fun(unsigned int num)
{
div_t c;

//num=1234;

c=div(num,10);

return c.rem;
}

компилятор (gcc (GCC) 3.3.3) выдает на строку c=div(num,10);
warning: function call has aggregate value
в принцепе мелочь а все равно не приятно (когда не понятно почему).

>>>

CL
()

принцип кодировки UTF-8

Нужно текст из кодировки UTF-8 конвертировать в KOI8-R (и обратно).
iconv мне не подходит, решил сам написать кодировшик (мне нужно работать со строго определенным набором символов, остальные символы заменяя пробелами)
Не подскажите ли правильно я понимаю принцип кодирования:
Цифры и латинские буквы кодируются 1 байтом, а русские 2 байтами
причем первый байт для русской буквы ВСЕГДА равен D0

CL
()

выдача данных через ком порт

Вот такая задачка
есть два компьютера которые работают через ком порт с устройством:
читают и пишут в него. Т.к вход/выход у устройства один то компы соеденены с ним через расширитель (устройство коммутации интерфейсов - может кто сталкивался). Читают оба компа нормально, а вот с записью проблема. Чтобы выдать данные через расширитель нужно компьтеру (который хочет выдавать данные) переключить расширитель на себя выдав через 105 цепь сигнал.

Так вот вопрос может кто знает что такое 105 цепь (у ком порта) и как в нее выдать сигнал.

PS пробовал поиграться с CRTSCTS для функции
int tcsetattr(int fd, int optional_actions, struct termios *termios_p); не получается

CL
()

быстрый возврат из ф-ции connect()

struct sockaddr_in serv_addr;

int full_server_addr(const char *ip_addr)
{
struct hostent *hp;

hp=gethostbyname(ip_addr);
if(hp==0)return -1;
bzero(&serv_addr,sizeof(serv_addr));
bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);
serv_addr.sin_family=hp->h_addrtype;
serv_addr.sin_port=htons((u_short)1500);
return 0;
}

void wait_connect_as_client(void)
{
int client_socket;
full_server_addr("192.168.0.20");//заполняем serv_addr
client_socket=socket(AF_INET,SOCK_STREAM,0);
while(1)
{
if(connect(client_socket,
(struct sockaddr*)&serv_addr,sizeof(serv_addr))!=-1)
{
main_loop(client_socket);//работаем пока сервер не отключится
close(client_socket);
client_socket=socket(AF_INET,SOCK_STREAM,0);
}
}
}

В функции wait_connect_as_client() пробую подключится к серверу и если успешно то работаю с ним пока не он не отключится, потом опять пытаюсь поключиться.
Проблема заключаеся в следуешем если компьтер (192.168.0.20) в сети есть то все Ок. Даже если сервер не отвечает то
connect() сразу возврашает -1, или компьтер (192.168.0.20) вообще не включен то тоже connect() сразу возврашает -1.
Но если компьтер выключить когда я к нему пытаюсь подключиться то цикл останавливается на ф-ции connect() и стоит там минут 10-15 потом продолжает работать (connect() сразу возврашает -1). Подскажите пожалуйста в чем дело, я так понимаю у сокета есть тайм-аут который для моей задачи слишком большой для меня приемлимо время ожидания не больше 5-7 секунд.

CL
()

изменение в QListViewItem

Вот в чем проблема есть virtual ф-ция QListViewItem::okRename ( int col ); - когда юзер нажимает ентер (типа отредоктировал запись) она вызывается. Я ее переопределяю. Так вот вопрос как в ней получить что юзер ввел? есть ф-ция QString QListViewItem::text ( int column ) но она возвращает старое значение (что было раньше), а мне новое нужно чтобы проверить на допустимость. у QListView есть СИГНАЛ void itemRenamed ( QListViewItem * item, int col, const QString & text ), но он вызывается после сделанных изменений, т.е.если значение ошибочное то прийдется обратно все самому востанавливать мне это не очень нравится, хотябы потому что зачем тогда нужно QListViewItem::okRename ( int col ) и void QListViewItem::cancelRename ( int col )

CL
()

пути к файлам

Программа работает с файлами, пути к которым заранее известны. Возник вопрос как к ним обрашаться т.е по полному пути /opt/mydir/file.txt или каждый раз вызывать chdir("/opt/mydir/"), а потом обрашаться к файлу file.txt. Директорий планируется несколько (5-6) штук, обрашение к файлам в этих директориях будет довольно частое.
Подскажите пожалуйста, что быстрее и оптимальнее будет работать.

CL
()

колонки в QListView

как в QT для QListView сделать чтобы в первой колонке были
QListViewItem а во второй QCheckListItem?

CL
()

программа для просмотра локальной сети

для виндозы есть замечательная (хотя и немного глючная) прога
LNetScan - удобная штука для просмотра расшаренных ресурсов в локальной сети, есть ли что-то подобное (скорее всего есть) для Linux? Подскажите как называется. LinNeighborhood - не совсем мне нравится, хотелось бы посмотреть что-нибудь другое.

CL
()

gtk_widget_grab_focus()

Если окно закрыто по после вызова gtk_widget_show() фокус на него
ставится автоматически, а как поставить фокус на открытое окно?
(библиотека Gtk+ 1.2)
для открытия (отображения) окна есть следующая функция

void on_ShowWindow_clicked(GtkWidget *window)
{
if(!GTK_WIDGET_MAPPED(window))
gtk_widget_show(window);//здесь фокус на окно ставится автоматически
else
{
gdk_window_raise(window->window);
gtk_widget_grab_focus(window);//устанавливаю фокус на окно
//не работает
}
}

вызов функции gtk_widget_grab_focus(window); ни к чему не приводит
фокус остается на другом окне. Подскажите плз в чем дело, если в Gtk нет такой ф-ции подскажите как используя иксы поставить фокус на окно.

Нахожусь на стадии завершения проекта и эта мелочь очень затрудняет его сдачу :((

CL
()

Как поставить фокус на открытое окно

Если окно закрыто по после вызова gtk_widget_show() фокус на него
ставится автоматически, а как поставить фокус на открытое окно?
Вариант с gtk_widget_hide() а потом gtk_widget_show() мне не нравится
(заметно мигание окна).
библиотека Gtk 1.2, но буду благодарен за подсказку и для Gtk 2.x

CL
()

установка скорости RS232

Может кто подскажет как установить нестандартую скорость на ком порт (100 бод)?

tcsetattr, и cfsetispeed не подходит т.к работают через константы (B50 B75 B110 и т.д)

с ioctl - похоже тоже самое

вроде както можно установить через inb outb но куда что писать я не знаю

может у кого исходники программ есть которые скорость RS232 ставят.

CL
()

обрашение к ф-ции из другого файла

в файле file1.c
есть ф-ция:
static void fun1(int aa);

static void fun1(int aa)
{

}

возможно ли к ней обратиться из файла file2.c ?
file1.c изменить не могу.

CL
()

ком порт и потоки

есть два потока один пишет в ком порт, второй читает из него (порт открыт сразу на запись и чтение) нужно ли блокировать потоки при обращении в дискриптору порта? (например при записи в порт блокировать поток который читает из порта)

и возможно ли закрыть дескрипор (например родителем) не блокируя потоки чтения-записи

(язык СИ)

CL
()

настройка ком порта

У меня есть несколько вопросов по работе с ком протами
1. как установить нестандартую скорость (100 бод)?
2. как установить 1.5 стоповых бита?

CL
()

RSS подписка на новые темы