Почему ls не работает
./main `pwd`/mntpoint
) -- то становится лучше. Но всё ещё не работает, потому что при использовании обработчиком запроса на доступ к каталогу этого же самого каталога происходит бесконечная рекурсия и исходный запрос не завершается.Есть, может, какие-то специальные книги по этой теме?
#define BIT_SET(port, bit) (port |= (1 << bit)) int main(void) { BIT_SET(PORTB, PORTB0); }
вот такой вариант, с макро-функцией, работает, так как это просто текстовая замена
0x04 |= 1 << 0
не имеет смысла. Он определён как volatile ссылка на память с адресом 0x04. Когда ты научишься передавать ссылку на такую память в функцию, функция тоже начнёт работать. Пытаюсь поставить библиотеку, не получается
почему?
file INSTALL cannot find "/home/durachok/HTTPParser/build/_deps/ethernet-src/include/Ethernet.h": No such file or directory.
почему не работает USER тред?
makecontext
не задав uc_link
. thread_func1
отрабатывает, а дальше гонка между вызовом thread_func2
из monitor_thread
и завершением программы из-за возврата из функции контекста в контексте созданном с uc_link == NULL
.clone
. Непонятно зачем дублировать указатель на функцию в Thread::func
и в Thread::context
. Непонятно зачем контексты, если schedule
их не использует. Непонятно, зачем monitor_thread
занимается активным ожиданием Thread::active
. Непонятно, зачем функции потоков лезут в потроха Thread
. Короче, этому коду не хватает идеи. Почему не печатается "custom thread completed"
thread->context.uc_link = NULL;
в строке 27, а, согласно man swapcontext: If the successor context pointer is NULL, the thread exits.
int custom_thread_create(custom_thread *thread, ucontext_t *link, void (*start_routine)(void*), void *arg) {
…
thread->context.uc_link = link;
…
}
…
ucontext_t main_context;
getcontext(&main_context);
if (custom_thread_create(&thread, &main_context, print_message, (void*)message) == 0) {
…
Хочется как-то отойти от указания всех параметров а считать что есть некий контекст.
если просто вручную написать обращение по индексу, то всё работает корректно
Почему такое может быть
avr-gcc -mmcu=atmega2560 -DF_CPU=8000000 -fverbose-asm -S test.c
), то можно увидеть, что он не обращается к массиву power_5v
, а все константы просто подставлены как непосредственные значения в инструкции. Я думаю, что по этой причине.как это исправить
struct message{ int id; char* data; }; … send(fds[i].fd, &msg, sizeof(msg), 0)
// Add new socket to poll array fds[nfds].fd = new_socket; fds[nfds].events = POLLIN; nfds++; } // Check for data from clients for (int i = 1; i < nfds; i++) { if (fds[i].revents & POLLIN) {
struct pollfd fds[1]; fds[0].fd = sock; fds[0].events = POLLOUT; if (poll(fds, 1, -1) <= 0) { perror("poll failed"); exit(EXIT_FAILURE); } if (!(fds[0].revents & POLLOUT)) { perror("connect failed"); exit(EXIT_FAILURE); } // Receive message from server while ((valread = read(sock, &msg, sizeof(msg))) == -1 && errno == EAGAIN);
как это можно попробовать подебажить понять что не так, что происходит
На что он ругается?
norm_b_square
, а в цикле работаешь с *norm_b_square
. А если ты имел в виду одноимённый norm_b_square
из функции main
, то нет, нельзя так сослаться на автоматическую переменную из другой функции.После ввода Ctrl+Z и нажатия Enter, если я правильно понимаю, в потоке появляется только EOF и символ новой строки.
end-of-file, that is, no more input from a stream
. Это значит, что ни EOF
как символ, ни что бы то ни было после конца файла прочитано быть не может. Если чтение работает (т.е. функции чтения не возвращают ошибок, либо ошибки не указывают на конец файла), то конец файла не достигнут.Ctrl+Z
в cmd
не вызывает закрытие потока ввода для процесса. почему так происходит?
str
и word
-- это переменные размером в один символ, а в строке char delimeters[6] = " .,!?;"
отсутствует 0-терминатор. Поэтомуscanf("%s", &str);
вылезет за пределы str
если ввести здесь что угодно.strcat(&word, &c);
вылезет за пределы word
если в c
будет не пустая строка. А в c
будет неизвестно что, потому что c = getchar()
не добавляет в эту строку 0-терминатор.strchr(delimeters, c);
может вернуть что угодно, если c
не входит в delimiters
. Почему компиляторы не используют инструкции повторения REP movs?
Она должна быть в миллиард раз быстрее
asm volatile ("int3");
и это тоже вызовет доставку сигнала, останов и трассировку последующих вызовов write. обработчик динамически ищет и выполняет функцию
Как правильно посчитать время выполнения fread/fwrite
Нужно посчитать время чтения и время записи одинакого размера блока данных на диск.
Причем, время момента, когда данные окажутся на диске
Я правильно понимаю, что fclose(f) закрывает файловый дескриптор f после того как данные записаны на диск?
Note that fflush() flushes only the user-space buffers provided
by the C library. To ensure that the data is physically stored
on disk the kernel buffers must be flushed too…
нужна функция get_time_func()