LINUX.ORG.RU

Сообщения normann

 

Кто знает способ определить тип данных в условиях директив препроцессора?

Допустим есть тип определенный оператором typedef, определение может быть разным. Есть ли способ в условиях директив препроцессора (#if/#ifdef и т.п.) определить что за тип стоит в определении, а точнее его размер?

p.s. c99.

 , ,

normann
()

Чем прочитать текст в UTF-32?

Пишу программу, она делает лог в файл, лог идет в юникоде (UCS4/wchar_t), а потом выясняется что я этот текст ничем прочитать не могу.

 ,

normann
()

Где узнать «system clock granularity»?

В man 2 select о таймауте написано:

The timeout argument specifies the minimum interval that select() should block waiting for a file descriptor to become ready. (This interval will be rounded up to the system clock granularity, and kernel scheduling delays mean that the blocking interval may overrun by a small amount.)

Где можно узнать этот granularity?

 

normann
()

ld: multiple definition of ... Я не могу больше.

Я не понимаю что происходит, кажется у меня уже едет крыша, с прошлой недели бьюсь над тем что бы осознать в чем проблема. Линковщик (ld) ругается на две функции в проекте. пишет:

/tmp/ccZThUym.o: In function `load_reg_file':
registers.c:(.text+0x0): multiple definition of `load_reg_file'
/tmp/ccqNKejG.o:regfileio.c:(.text+0x0): first defined here
...
collect2: error: ld returned 1 exit status
О второй функции пишет тоже самое. Во всем проекте функция с именем load_reg_file определена (и объявлена) всего один раз, ничего к ней не обращается (все закомментировал), никаких ссылок. Когда вставляю функцию в другой проект, все прекрасно собирается (как и раньше когда-то собиралось). Я не понимаю логики линковщика т.к. сначала я попробовал закомментировать всю функцию и сделать рефакторинг. На новую функцию линковщик ругается так же точно, удалил тело функции, всё равно, переименовал функцию, все равно. Что происходит, не понимаю, может нечистая сила, а может у меня крыша поехала. Не знаю в каком направлении уже искать. И показать то нечего, весь проект не покажешь, а саму функцию показывать смысла нет. Но может кто из опытных подскажет куда лезть и что проверять?

Версии опробованных ld: 2.22 и 2.23.2

 ,

normann
()

multiple definition of `...'

Не могу собрать проект с inline подстановками. Вот например:

head.h:

#include <ctype.h>

inline char* strbegin(char* s)
{
    while( isblank(*s) ) ++s;
    return s;
}

proc.c:

#include "head.h"

main.c:

#include "head.h"

int main(int argc, char* argv[])
{
    return 0;
}

$gcc main.c proc.c

Линковщик сообщает что:

/tmp/ccQRGJfn.o: In function `strbegin':
proc.c:(.text+0x0): multiple definition of `strbegin'
/tmp/ccKc1R22.o:main.c:(.text+0x0): first defined here
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

ЧЯДНТ?

 ,

normann
()

Запутался в директивах препроцессора C

Пытаюсь перед определением макро, если макро с таким именем уже есть, сохранить старое значение, потом назначить новое значение, а после использования макро вернуть старое значение этому имени.

Например:

#define NUM 8

#ifdef NUM
# define pre_NUM NUM
# undef NUM
#endif

#define NUM 4
    
    //Использую NUM

#undef NUM
#if defined pre_NUM
# define NUM pre_NUM
# undef pre_NUM
#endif
После этого кода когда пытаюсь использовать NUM препроцессор вставляет pre_NUM вместо 8. Существует ли способ вернуть имени NUM восьмерку?

 

normann
()

Может ли синхронный/блокирующий read() последовательного порта в какой нибудь ситуации вернуть 0?

Последовательный порт открыт в raw режиме, а в man 2 read написано что «zero indicates end of file», а прерывание из-за полученного сигнала возвращает -1. Стоит ли делать лишнюю (или не лишнюю) проверку на 0?


P.S. man:

RETURN VALUE

On success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number. It is not an error if this number is smaller than the number of bytes requested; this may happen for example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted by a signal. On error, -1 is returned, and errno is set appropriately. In this case it is left unspecified whether the file position (if any) changes.

 , ,

normann
()

Как сбросить входящий через tty пакет на середине чтения?

Во время чтения из tty (побайтово) входящего пакета обнаруживается что пакет содержит ошибку или еще какую нибудь лабуду. Как сбросить/отменить оставшееся непрочитанное содержимое пакета (очистить входящий буфер или что-то вроде того) для отправки исходящего пакета или для дальнейшего прослушивания порта на предмет следующего входящего (пакета) запроса?

В моем случае пакеты ModBus.

 , ,

normann
()

Кто знает где взять полное описание протокола ModBus RTU?

Желательно, конечно, на русском, но на английском тоже сойдет если нет первого.

Перемещено Pinkbyte из linux-org-ru

 

normann
()

Помогите определиться с термином терминал (TTY)

Как правильно в UNIX-среде именовать (в речи) последовательный порт? В некоторых источниках его называют терминалом, на сколько это правильно?

 , ,

normann
()

Зачем в memset второй аргумент имеет тип int?

void *memset(void *s, int c, size_t n);

Почему не char, заполняется все равно одним байтом?

 ,

normann
()

Как в интерпертаторе dosbox получить значение переменной окружения?

Как в командном интерпретаторе dosbox получить значение переменной окружения? %переменная% почему-то не работает.

 

normann
()

Как получить путь к точке монтирования devtmpfs (/dev)?

Как получить путь к точке монтирования devtmpfs (/dev) без нарушения совместимости с POSIX, где об этом могу прочитать?

 ,

normann
()

Как получить размер поля структуры в си?

Скажем есть структура:

struct st {
	long fld1;
}
Надо получить размер (sizeof) поля fld1.

 

normann
()

Какими вариантами можно документировать обособленную группу нескольких макро-констант?

У меня в файле группа макро-констант (Си) с общим для группы назначением. Я могу как нибудь отделить документацию для этой группы от остальных макро-определений этого файла? На пример общий заголовок для всей группы, а дальше описание для каждой константы отдельно.

 ,

normann
()

Предписан ли стандартом в Си размер смещения void*?

Например uint32_t* при единичном смещении каждый раз смещается на 4, uint16_t* на 2, и т.п. Мой компилятор показывает 1, но будет ли так всегда?

 

normann
()

favicon для документации в html (Doxygen)

Можно ли Doxygen-у указывать favicon для документации в формате html?

 

normann
()

Всегда ли sizeof(void*) == 8 означает 64 разрядную машину?

Всегда ли sizeof(void*) == 8 означает 64 разрядную машину?

 ,

normann
()

Разве в Си нельзя задать в качестве возвращаемого из функции типа перечисление?

М?

 

normann
()

Как установить разные значки на разные рабочие столы KDE4

Хочу что бы на разных рабочих столах помимо содержимого папки desktop можно было увидеть/выполнить приложение/команду индивидуальную для данного рабочего стола.

 ,

normann
()

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