
- Главная
- Каталог
- Интернет технологии
- С/С++ Portal | Программирование
С/С++ Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика
Статистика канала
switch внутрь while, поломать пространство-время, и оно спокойно скомпилится.
Не показывайте это питонистам, они расплачутся.
#include <stdio.h>
int main() {
int i = 0;
switch (i) {
case 0:
while (i < 3) {
printf("%d", i);
case 1:
i++;
}
}
return 0;
}{}
djb2_hash :: (s: string) -> u32 {
// Хеш djb2.
// Людям он, похоже, нравится, но для строк ассетов, которые мы часто видим,
// он выглядит довольно последовательным. Например, если у тебя имена ассетов
// "foo1", "foo2", "foo3", они все захешируются в последовательные слоты,
// потому что отличаются только последним символом, а эти символы идут подряд!
hash := HASH_INIT;
for 0..s.count-1 #no_abc #no_aoc {
hash = ((hash << 5) + hash) + s[it]; // hash * 33 + c
}
return hash;
}{}
#include <stdio.h>
typedef struct Counter Counter;
struct Counter {
int a;
int b;
void (*add_and_print)(Counter *);
};
void counter_add_and_print(Counter *c) {
c->a += c->b;
printf("значение = %d (добавили %d)\n", c->a, c->b);
}
int main(void) {
Counter c = { .a = 0, .b = 3, .add_and_print = counter_add_and_print };
c.add_and_print(&c);
c.add_and_print(&c);
return 0;
}{}
#include <algorithm>
#include <print>
#include <ranges>
#include <vector>
#include <unordered_set>
// Returns primes in range: 3...2 * n + 2
std::vector<int> sieve_sundaram(int n) {
auto sieve =
std::views::iota(1, n + 1)
| std::ranges::to<std::unordered_set>();
auto sieved_out =
std::views::iota(1, n + 1)
| std::views::transform([n](int j) {
return
std::views::iota(j, n + 1)
| std::views::transform([j](int i) { return i + j + 2 * i * j; })
| std::views::take_while([n](int x) { return x <= n; });
})
| std::views::join;
for (int out : sieved_out)
sieve.erase(out);
auto primes = sieve
| std::views::transform([](int x) { return x * 2 + 1; })
| std::ranges::to<std::vector>();
std::ranges::sort(primes);
return primes;
}
int main() {
std::println("Primes: {}", sieve_sundaram(16));
// Primes: [3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
}{}
Если тебе нравится перегрузка операторов в C++, то тебе зайдет и перегрузка пробелов! -уверяет Страуструп
passwd. Она позволяет обычному пользователю поменять пароль. Но хэши паролей лежат в системном файле, который защищен и писать в него может только root. Как тогда обычный пользователь может записать что-то в файл, принадлежащий root?
У бинарника passwd включен специальный бит Set-UID. Когда ты его запускаешь:
- Effective UID временно становится 0 (root), чтобы дать доступ на запись в файл.
- Real UID остается 1000 (ты).
Дальше программа вызывает getuid(), чтобы проверить Real UID. По нему она понимает, root ты или обычный пользователь, и если ты обычный пользователь, по умолчанию выбирает твой аккаунт и гарантирует, что ты можешь менять только свою запись пароля. Без getuid() Set-UID программа имела бы root-права, но не имела бы способа определить, кто именно ее запустил.
Ниже полный, запускаемый пример на C, который показывает идентичности текущего процесса. Если запустить обычно, оба UID совпадут. Если сменить владельца на root и выставить Set-UID бит (chmod u+s), увидишь, что они расходятся.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
// Syscall 102 (x86_64): getuid (Кто меня запустил?)
uid_t ruid = getuid();
// Syscall 107 (x86_64): geteuid (От чьего имени я действую?)
uid_t euid = geteuid();
printf("Real UID (Identity): %d\n", ruid);
printf("Effective UID (Powers): %d\n", euid);
if (ruid != euid) {
printf("Process is running with borrowed privileges!\n");
} else {
printf("Process is running with standard privileges.\n");
}
return 0;
}{}
getuid состоит в маленьком элитном клубе системных вызовов: он принимает 0 аргументов, гарантированно никогда не падает, и никогда не меняет errno.
Отзывы канала
всего 2 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
С/С++ Portal | Программирование — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 16.2K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 12.2, количество отзывов – 2, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 6293.7 ₽, а за 26 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий