Как реализовать на с или assembler асинхронную выборку из RAM?
memcpy
для MIPS. Этот код не выглядит асинхронным, но написан именно так (сначала групповая загрузка в разные регистры, потом изменение базового адреса загрузки, потом групповое сохранение, потом изменение базового адреса сохранения) с рассчётом на то, что процессор сможет, в том числе, перекрыть во времени операции загрузки, арифметики и сохранения данных. Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции?
static struct file_operations process_sched_add_module_fops = { … proc_create(PROC_CONFIG_FILE_NAME,0777,NULL,&process_sched_add_module_fops);
proc_ops
, а не на file_operations
. Компилятор должен был бы что-нибудь сказать в этом месте, ты не читаешь его предупреждения?static ssize_t process_sched_add_module_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
__user
у параметра buf
. Этот буфер приходит из юзерспейса, по этой причине ты не можешь лезть в него напрямую функцией kstrtol
. copy_from_user(ips[i], buffer,256); printk(KERN_INFO "ips: %s \n", ips[i]); i++; if(strncmp(ips[0],"wh",2)==0){
почему он работает,
как его можно переписать, чтобы было удобнее читать?
Почему выводит только первую строку а остальные что-то непонятное?
int print_arr(int str, int stlb, int matr[][stlb]){ ... } int mass[10][10]; ... print_arr(N, L, &mass[k][i]);
int main()
{
int L = 0, N = 0, k, i;
scanf("%d", &N);
L=N;
int mass[N][L];
for(k = 0; k < N; k++){
printf("[%d]\n", k);
for(i = 0; i < L; i++){
scanf("%d", &mass[k][i]);
}
}
printf("matrix NxN\n");
print_arr(N, L, mass);
return 0;
}
scanf("%d", &d);
имелось в виду scanf("%d", &nUm);
.nUm = nUm % d;// делим на него
nUm = nUm / d;// делим на него
d=2; //обнуляем переменную d
printf(file, "\nОшибка, недопустимые значения");
он записал обрывок сообщения:
"стимые значения"
а почему?
fprintf(file, "\nОшибка, недопустимые значения");
fscanf(file, "%f", &num) == true
== 1
. fscanf возвращает число (отсканированных полей), а не признак успеха. sizeof(char)
while(isdigit(string[j]) || isalpha(string[j])) { buf = (char *)realloc(buf, ++k * sizeof(char)); buf[k - 1] = string[j]; j++; }
parsed_string[size - 1] = (char *)malloc(strlen(buf) * sizeof(char)); strcpy(parsed_string[size - 1], buf);
Почему возможно объявление глобальной переменной
struct interval b
-- это определение переменной, выделяющее для неё место на стеке. Но его можно переписать, чтобы b тоже стало объявлением, например так:int main ()
{
extern struct interval b;
struct interval
{
int first;
int second;
};
}
struct interval b;
-- это tentative definition с внешней линковкой. Стандарт (С99) говорит о нём следующее (6.9.2:2):A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static, constitutes
a tentative definition. If a translation unit contains one or more tentative definitions for
an identifier, and the translation unit contains no external definition for that identifier,
then the behavior is exactly as if the translation unit contains a file scope declaration of
that identifier, with the composite type as of the end of the translation unit, with an
initializer equal to 0.