источник
#cpp #programming
👉 @cpp_lib
Добро пожаловать в канал "Библиотека C/C++ разработчика"! Если вы являетесь плюсовиком или сишником, то этот канал - именно для вас. Здесь вы найдете полезные материалы по всему, что может быть полезно разработчику на C/C++. От справочников и учебников до последних новинок и трендов в мире программирования на C/C++ - у нас есть все, что вам может понадобиться. Наш канал - это не только место для обучения, но и возможность общения с единомышленниками. Если у вас есть вопросы или вы хотите поделиться своим опытом - обращайтесь к администратору канала @evgenycarter. Присоединяйтесь к нашему каналу, чтобы быть в курсе всех новостей и делиться знаниями с другими разработчиками! Мы ждем вас!
12 Jan, 20:45
06 Jan, 07:36
03 Jan, 09:23
30 Dec, 09:39
28 Dec, 09:10
28 Dec, 08:44
26 Dec, 07:44
25 Dec, 12:01
25 Dec, 10:01
25 Dec, 09:10
19 Dec, 07:33
17 Dec, 10:29
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
17 Dec, 09:31
17 Dec, 07:37
02 Dec, 07:55
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
01 Dec, 17:02
30 Nov, 11:04
29 Nov, 10:58
28 Nov, 08:02
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
27 Nov, 12:50
25 Nov, 21:04
25 Nov, 12:36
25 Nov, 11:31
22 Nov, 07:00
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
21 Nov, 11:00
21 Nov, 05:01
20 Nov, 05:01
19 Nov, 12:01
19 Nov, 10:01
19 Nov, 09:00
19 Nov, 07:01
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
19 Nov, 05:02
18 Nov, 20:38
18 Nov, 10:01
18 Nov, 09:33
15 Nov, 10:40
14 Nov, 07:47
13 Nov, 11:17
13 Nov, 07:04
11 Nov, 10:37
10 Nov, 18:21
09 Nov, 13:12
08 Nov, 07:27
curl(1)
.
$ strace -esocket,connect,sendto,recvfrom,close curl -s example.com > /dev/null
...
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("93.184.216.34")}, 16) = -1 EINPROGRESS (Operation now in progress)
sendto(3, "GET / HTTP/1.1\r\nHost: example.co"..., 75, MSG_NOSIGNAL, NULL, 0) = 75
recvfrom(3, "HTTP/1.1 200 OK\r\nCache-Control: "..., 16384, 0, NULL, NULL) = 1448
close(3) = 0
+++ exited with 0 +++
06 Nov, 13:37
04 Nov, 07:36
01 Nov, 10:06
uint16_t checksum(void *addr, int count)
{
/* Compute Internet Checksum for "count" bytes
* beginning at location "addr".
* Taken from https://tools.ietf.org/html/rfc1071
*/
register uint32_t sum = 0;
uint16_t * ptr = addr;
while( count > 1 ) {
/* This is the inner loop */
sum += * ptr++;
count -= 2;
}
/* Add left-over byte, if any */
if( count > 0 )
sum += * (uint8_t *) ptr;
/* Fold 32-bit sum to 16 bits */
while (sum>>16)
sum = (sum & 0xffff) + (sum >> 16);
return ~sum;
}
28 Oct, 09:44
/*
* Taken from Kernel Documentation/networking/tuntap.txt
*/
int tun_alloc(char *dev)
{
struct ifreq ifr;
int fd, err;
if( (fd = open("/dev/net/tap", O_RDWR)) < 0 ) {
print_error("Cannot open TUN/TAP dev");
exit(1);
}
CLEAR(ifr);
/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
*/
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
if( *dev ) {
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
}
if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
print_error("ERR: Could not ioctl tun: %s\n", strerror(errno));
close(fd);
return err;
}
strcpy(dev, ifr.ifr_name);
return fd;
}
28 Oct, 07:01
26 Oct, 19:30
26 Oct, 11:37
25 Oct, 09:44
23 Oct, 08:51
21 Oct, 10:35
21 Oct, 06:30
20 Oct, 09:13
19 Oct, 15:58
17 Oct, 19:50
16 Oct, 10:05
15 Oct, 19:01
15 Oct, 14:57
15 Oct, 10:10
15 Oct, 08:03
15 Oct, 07:23
int g_chores;
pthread_mutex_t g_locker = PTHREAD_MUTEX_INITIALIZER;
void *worker(void *arg) {
for (int i = 0; i < ITERATIONS; ++i) {
pthread_mutex_lock(&g_locker);
++g_chores;
pthread_mutex_unlock(&g_locker);
}
return 0;
}
13 Oct, 20:41
#define LSH_RL_BUFSIZE 1024
char *lsh_read_line(void)
{
int bufsize = LSH_RL_BUFSIZE;
int position = 0;
char *buffer = malloc(sizeof(char) * bufsize);
int c;
if (!buffer) {
fprintf(stderr, "lsh: allocation error\n");
exit(EXIT_FAILURE);
}
while (1) {
// Read a character
c = getchar();
// If we hit EOF, replace it with a null character and return.
if (c == EOF || c == '\n') {
buffer[position] = '\0';
return buffer;
} else {
buffer[position] = c;
}
position++;
// If we have exceeded the buffer, reallocate.
if (position >= bufsize) {
bufsize += LSH_RL_BUFSIZE;
buffer = realloc(buffer, bufsize);
if (!buffer) {
fprintf(stderr, "lsh: allocation error\n");
exit(EXIT_FAILURE);
}
}
}
}
13 Oct, 08:53
10 Oct, 22:04
10 Oct, 09:26
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
10 Oct, 05:20
std::vector
и копирования этого кода на страницу исполняемой памяти. Хотя этот подход был хорош с дидактической точки зрения, на практике, вероятно, вы захотите записывать код напрямую в исполняемую память. Вот пример, как я предлагаю это сделать:
1 MemoryPages mp;
2 mp.push(0x48); mp.push(0xb8);
09 Oct, 10:04
1 // hello_0.cpp
2 #include <iostream>
3 #include <string>
4
5 int main() {
6 // Get the user name
7 std::string name;
8 std::cout << "What is your name?\n";
9 std::getline(std::cin, name);
10 std::string hello_name = "Hello, " + name + "!\n";
11
12 // Greet the user
13 std::cout << hello_name;
14 }
09 Oct, 08:00