Где можно почитать почему так происходит, почему такие разные вариации записи одно числа в шестнадцатеричной системе исчисления?
A double argument representing a floating-point number is converted in the
style [−]0xh.hhhh p±d, where there is one hexadecimal digit (which is
nonzero if the argument is a normalized floating-point number and is
otherwise unspecified) before the decimal-point character...
char str1[5]; char str2[3]; fgets(str1,5,stdin); fgets(str2,3,stdin);
Я ожидаю, что при запуске введу слово из 5 букв, потом слово из 3
fgets() reads in at most one less than size characters from stream
and stores them into the buffer pointed to by s.
Reading stops after an EOF or a newline.
If a newline is read, it is stored into the buffer.
!quit
, потому что quit не меняется в этой функции и в функциях вызываемых из неё.Может стоит вынести флаг в параметры потока
while(!quit) { if(difftime(time(NULL), last_cycle) > 30) { last_cycle = time(NULL); // Тут мои грязные дела } }
sleep
или что-нибудь типа pthread_mutex_timedlock
/pthread_cond_timedwait
.#include <sys/time.h>
#include <pthread.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
struct thread1 {
pthread_mutex_t lock;
pthread_cond_t cond;
bool quit;
};
static void* thread_process(void *p) {
struct thread1 *arg = p;
for (;;) {
bool quit;
pthread_mutex_lock(&arg->lock);
if (!arg->quit) {
struct timeval now;
struct timespec ts;
gettimeofday(&now, NULL);
ts.tv_sec = now.tv_sec + 30;
ts.tv_nsec = now.tv_usec * 1000;
pthread_cond_timedwait(&arg->cond, &arg->lock, &ts);
}
quit = arg->quit;
pthread_mutex_unlock(&arg->lock);
if (quit)
return NULL;
// Тут мои грязные дела
}
return NULL;
}
int main() {
pthread_t th;
struct thread1 arg = {
.lock = PTHREAD_MUTEX_INITIALIZER,
.cond = PTHREAD_COND_INITIALIZER,
.quit = false,
};
pthread_create(&th, NULL, thread_process, &arg);
char cmd[16];
while(true) {
scanf("%s", cmd);
if(!strcmp(cmd, "quit")) {
pthread_mutex_lock(&arg.lock);
arg.quit = true;
pthread_cond_broadcast(&arg.cond);
pthread_mutex_unlock(&arg.lock);
break;
}
// остальные команды
}
pthread_join(th, NULL);
return 0;
}
x = float(a) / 4.;
char **array; array = malloc(arr_len); for(unsigned long step = 0; step <= arr_len; step++) { array[step] =
arr_len
элементов требуется не arr_len
, а arr_len * sizeof(char *)
. Вторая: цикл выполняет не arr_len
, а arr_len + 1
итерацию. 1. корреткно ли я делал замеры времени? (может есть какая библиотека на Си или прочее?).
2. Правильно ли я инициализоровал сегменты ? (может есть упрощенная форма)
3. Как правильно подобрать размер сегмента?
4. В каких случаях лучше использовать фрагментированный ввод/вывод? (любые советы по его использованию)
Символы повторяются из-за static?
char *_itoa(int i) {
static int slot;
static char buf[10][2];
slot = (slot + 1) % 10;
buf[slot][0] = i + '0';
buf[slot][1] = '\0';
return buf[slot];
}
int main() {
printf("%s + %s = %s", _itoa(2), _itoa(2), itoa(4));
_getch();
}
при компиляции флаг из реестра не удаляется. В чем может быть проблема?
Байты из зеленой области, как я понял, это информация линкера golink. Так ли это?
int **matrix = (int**)malloc(matrix_size * sizeof(int));
int **matrix = (int**)malloc(matrix_size * sizeof(int *));
for (int i = 0; i < matrix_size; ++i) { for (int j = 0; j < matrix_size; ++j) { if(i > j) { arr[i] = matrix[i][j]; } } }
counter = 0;
for (int i = 0; i < matrix_size; ++i)
{
for (int j = 0; j < matrix_size; ++j)
{
if(i > j)
{
arr[counter++] = matrix[i][j];
}
}
}
ума не приложу, почему размер void _stdcall foo(short a, short b); параметров равен 8
Как выяснилось, стек растет не только на 4 байта, а на 2.
sub $imm, %esp
) не означает, что это следует делать. См: The stack will always be maintained 16-byte aligned, except within
the prolog (for example, after the return address is pushed), and except where
indicated in Function Types for a certain class of frame functions
Для венды на x86 я такого описания на том же сайте не нашёл, но точно выравнивание должно быть не меньше 4. есть ли смысл использовать простые чар массивы формата char name[32] или динамические массивы char name[] в замену указателям с последующим выделением им памяти?
Сразу скажу, комп у меня слабенький и ждать 3-4 часа чтоб понять что забыл в конце оператора точку с запятой поставить, это не хорошо?!
*.o
. Т.е. можно взять и откомпилировать один файл из дерева исходников ядра. Например: make init/main.o
..c
-- перекомпилируется единственный соответствующий ему файл .o
.как можно тестировать компоненты ядра
пытаюсь понять, почему qemu не хочет запускать ядро....
MAGIC equ 0x1BADB002
...
grubBoot:
dd MAGIC
dd FLAGS
; dd 0
dd (end_grubBoot - grubBoot)
dd -(MAGIC + FLAGS + (end_grubBoot - grubBoot))
; dd -(MAGIC + 0 + (end_grubBoot - grubBoot))
; dw 0
; dw FLAGS
; dd 8
end_grubBoot:
MAGIC equ 0x1BADB002
dd MAGIC
dd FLAGS
dd -(MAGIC + FLAGS)
...
Trace 0: 0x7f2a71e084c0 [00000000/000caa1a/0xb0]
----------------
IN:
0x00102060: 9b wait
0x00102061: db e3 fninit
0x00102063: bc 44 23 10 00 movl $0x102344, %esp
0x00102068: 53 pushl %ebx
0x00102069: 50 pushl %eax
0x0010206a: e8 68 00 00 00 calll 0x1020d7
Trace 0: 0x7f2a71e08800 [00000000/00102060/0xb0]
----------------
IN:
0x001020d7: 55 pushl %ebp
0x001020d8: 89 e5 movl %esp, %ebp
0x001020da: 68 00 10 10 00 pushl $0x101000
0x001020df: e8 8d ff ff ff calll 0x102071
Linking TBs 0x7f2a71e08800 [00102060] index 0 -> 0x7f2a71e08a40 [001020d7]
Trace 0: 0x7f2a71e08a40 [00000000/001020d7/0xb0]
----------------
IN:
0x00102071: 55 pushl %ebp
0x00102072: 89 e5 movl %esp, %ebp
0x00102074: 53 pushl %ebx
0x00102075: 83 ec 10 subl $0x10, %esp
0x00102078: c7 45 f4 00 80 0b 00 movl $0xb8000, -0xc(%ebp)
0x0010207f: c7 45 f8 00 00 00 00 movl $0, -8(%ebp)
0x00102086: eb 35 jmp 0x1020bd
Linking TBs 0x7f2a71e08a40 [001020d7] index 0 -> 0x7f2a71e08c80 [00102071]
Trace 0: 0x7f2a71e08c80 [00000000/00102071/0xb0]
----------------
IN:
0x001020bd: 8b 55 f8 movl -8(%ebp), %edx
0x001020c0: 8b 45 08 movl 8(%ebp), %eax
0x001020c3: 01 d0 addl %edx, %eax
0x001020c5: 0f b6 00 movzbl (%eax), %eax
0x001020c8: 0f be c0 movsbl %al, %eax
0x001020cb: 3b 45 f8 cmpl -8(%ebp), %eax
0x001020ce: 7f b8 jg 0x102088
Linking TBs 0x7f2a71e08c80 [00102071] index 0 -> 0x7f2a71e08f00 [001020bd]
Trace 0: 0x7f2a71e08f00 [00000000/001020bd/0xb0]
----------------
IN:
0x00102088: 8b 45 f8 movl -8(%ebp), %eax
0x0010208b: 8d 14 00 leal (%eax, %eax), %edx
0x0010208e: 8b 45 f4 movl -0xc(%ebp), %eax
0x00102091: 01 d0 addl %edx, %eax
0x00102093: 8b 55 f8 movl -8(%ebp), %edx
0x00102096: 8d 0c 12 leal (%edx, %edx), %ecx
0x00102099: 8b 55 f4 movl -0xc(%ebp), %edx
0x0010209c: 01 ca addl %ecx, %edx
0x0010209e: 0f b7 12 movzwl (%edx), %edx
0x001020a1: 89 d3 movl %edx, %ebx
0x001020a3: b3 00 movb $0, %bl
0x001020a5: 8b 4d f8 movl -8(%ebp), %ecx
0x001020a8: 8b 55 08 movl 8(%ebp), %edx
0x001020ab: 01 ca addl %ecx, %edx
0x001020ad: 0f b6 12 movzbl (%edx), %edx
0x001020b0: 66 0f be d2 movsbw %dl, %dx
0x001020b4: 09 da orl %ebx, %edx
0x001020b6: 66 89 10 movw %dx, (%eax)
0x001020b9: 83 45 f8 01 addl $1, -8(%ebp)
0x001020bd: 8b 55 f8 movl -8(%ebp), %edx
0x001020c0: 8b 45 08 movl 8(%ebp), %eax
0x001020c3: 01 d0 addl %edx, %eax
0x001020c5: 0f b6 00 movzbl (%eax), %eax
0x001020c8: 0f be c0 movsbl %al, %eax
0x001020cb: 3b 45 f8 cmpl -8(%ebp), %eax
0x001020ce: 7f b8 jg 0x102088
Linking TBs 0x7f2a71e08f00 [001020bd] index 1 -> 0x7f2a71e091c0 [00102088]
Trace 0: 0x7f2a71e091c0 [00000000/00102088/0xb0]
Linking TBs 0x7f2a71e091c0 [00102088] index 1 -> 0x7f2a71e091c0 [00102088]
Trace 0: 0x7f2a71e091c0 [00000000/00102088/0xb0]
----------------
IN:
0x001020d0: 90 nop
0x001020d1: 83 c4 10 addl $0x10, %esp
0x001020d4: 5b popl %ebx
0x001020d5: 5d popl %ebp
0x001020d6: c3 retl
Linking TBs 0x7f2a71e091c0 [00102088] index 0 -> 0x7f2a71e098c0 [001020d0]
Trace 0: 0x7f2a71e098c0 [00000000/001020d0/0xb0]
----------------
IN:
0x001020e4: 83 c4 04 addl $4, %esp
0x001020e7: eb fe jmp 0x1020e7
Trace 0: 0x7f2a71e09b00 [00000000/001020e4/0xb0]
----------------
IN:
0x001020e7: eb fe jmp 0x1020e7
Linking TBs 0x7f2a71e09b00 [001020e4] index 0 -> 0x7f2a71e09c40 [001020e7]
Trace 0: 0x7f2a71e09c40 [00000000/001020e7/0xb0]
Linking TBs 0x7f2a71e09c40 [001020e7] index 0 -> 0x7f2a71e09c40 [001020e7]
...
LDEMU=-melf_i386
kernel: $(CSOURCES) $(NASMSOURCES) $(LDFILE)
$(CC) $(CEMU) -std=c$(CSTD) -c $(CSOURCES) -ffreestanding -nostdlib -nostdinc -fno-pic
$(ASM) $(NASMSOURCES)
$(LD) $(LDEMU) --nmagic -T$(LDFILE) -o kernel *.o