• Epoll возвращает событие с файловым дескриптором 0, хотя раньше работало, что может быть не так?

    @xverizex Автор вопроса
    Я не знаю как. Да и что он вам мешает? Может вы будете знать почему так было, и не сделаете ошибку в будущем.
  • Как сделать или как работает listen localhost?

    @xverizex Автор вопроса
    wisgest, d принципе я задавал вопрос в рамках си, то есть функция bind.
  • Как сделать или как работает listen localhost?

    @xverizex Автор вопроса
    wisgest, я хотел посмотреть реализацию как это делается на си, если возникнут сложности.
  • Как правильней сделать это на си?

    @xverizex Автор вопроса
    По моему идентифицировать издателей/подписчиков лучше всего по имени. И пусть имя они сами себе выбирают.

    Я подумывал об имени, но я хотел сделать также быстрый поиск издателя. О я придумал, можно же еще кое куда добавить указатель на строку и тогда можно будет отсортировать по возрастанию, но думаю я этого не буду делать. type это номер издателя. Когда вы в init добавляете номер, он сортируется по возрастанию, и когда нужно будет произвести другие манипуляции, например отправка события от издателя ( type ), то чтобы найти издателя, будет произведен бинарный поиск. Вот что я думаю удобнее и быстрее. Я сначала линейный поиск использовал, но если будет 10 издателей, то десятого он найдет через 10 итераций, а в бинарном поиске где-то за 3-4. Почему я event сделал тоже void, чтобы не переписывать издателя каждый раз, да тем более вдруг разные издатели будут отправлять разные события. Мне остается только закодировать структуру, которая будет передаваться в event и всё, и в функции подписчике преобразовать void * к нужному типу. А зачем мне делать тип события, если функция send_event отправляет любую структуру? То есть я также могу в void * передать структуру с информацией о событии, но только если мне это понадобиться. Я вот вчера написал тестовый код, это блин не самый удачный пример, но другого нет. Я хочу показать как это работает.

    main.c
    #include <stdio.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <stdlib.h>
    #include "publisher.h"
    #include "screen.h"
    #include "pubs.h"
    #include "trade.h"
    #include "chat.h"
    
    static void free_data ( void *event, void *data ) {
    	struct trade *td = ( struct trade * ) data;
    	if ( td ) {
    		free ( td );
    		delete_all_publisher ( FREE );
    	}
    }
    
    void *handler ( void *data ) {
    	while ( 1 ) {
    		sleep ( 1 );
    		struct trade *td = calloc ( 1, sizeof ( struct trade ) );
    		for ( int i = 0; i < 2; i++ ) {
    			td->trade[i] = i;
    		}
    		td->size = 2;
    		send_event ( TRADE, td );
    		init_publisher ( FREE, free_data, td );
    	}
    }
    
    int main ( ) {
    
    	init_screen ( );
    	init_chat ( );
    	pthread_t pt;
    
    	pthread_create ( &pt, NULL, handler, NULL );
    
    	while ( 1 ) {
    		show_screen_trade ( );
    		print_chat ( );
    		send_event ( FREE, NULL );
    		sleep ( 1 );
    	}
    }

    trade.h
    #ifndef __TRADE_H
    #define __TRADE_H
    
    struct trade {
    	int size;
    	int trade[10];
    };
    
    #endif

    pubs.h
    #ifndef __PUBS_H
    #define __PUBS_H
    
    enum { TRADE, FREE };
    
    #endif

    screen.c
    #include <stdio.h>
    #include "publisher.h"
    #include "pubs.h"
    #include "trade.h"
    
    static struct trade *td;
    
    static void in_screen ( void *event, void *data ) {
    	td = ( struct trade * ) event;
    }
    
    void init_screen ( ) {
    
    	init_publisher ( TRADE, in_screen, NULL );
    }
    
    void show_screen_trade ( ) {
    	if ( !td ) return;
    
    	for ( int i = 0; i < td->size; i++ ) {
    		printf ( "скидка %d%%\n", td->trade[i] );
    	}
    
    	td = NULL;
    }


    chat.c
    #include <stdio.h>
    #include "publisher.h"
    #include "pubs.h"
    #include "trade.h"
    
    static struct trade *td;
    
    static void in_chat ( void *event, void *data ) {
    	td = ( struct trade * ) event;
    }
    
    void init_chat ( ) {
    	init_publisher ( TRADE, in_chat, NULL );
    }
    
    void print_chat ( ) {
    	if ( !td ) return;
    
    	for ( int i = 0; i < td->size; i++ ) {
    		printf ( "чат: скидка %d%%\n", td->trade[i] );
    	}
    
    	td = NULL;
    }
  • Есть ли какие нибудь сервисы с websocket?

    @xverizex Автор вопроса
    Александр, так мне нужен сервис. Я уже написал websocket клиента. Хотел бы использовать его. Есть например на twitch сервис websocket, но там для полноценного использования нужно пройти oauth2 с указанием прав. А у меня пока проблемы с oauth2. Я пишу на си. Консольная программа. Этот протокол oauth2 отсылает на сайт, в котором находится токен. Но когда я перехожу на эту страницу, то уже не помню что там. В общем у меня есть проблема с oauth2. Потом решу если смогу. Хотел ещё попробывать использовать с помощью графического виджета просмотра веб страниц, но для виджета нельзя задать куки. А без них токен не дают. Наверное надо составить запрос с куки, которые выданы в консольной программе, и найти в исходниках html страницы этот самый токен. Но это делать пока не охота.
  • Есть ли какие нибудь сервисы с websocket?

    @xverizex Автор вопроса
    Александр, я написал сообщение, надо было ваш ник указать.
  • Есть ли какие нибудь сервисы с websocket?

    @xverizex Автор вопроса
    Я точно не понял что значит фронтэнд сервис. у меня консольная программа например, которая будет слать мне уведомления на экран если по websocket поступит какая нибудь новость. Не знаю, может новости какие нибудь на тему it, анекдотов. Или ещё что нибудь. Не для тестирования. Я уже тестировал на echo сервере, всё работает. Мне бы для использования.
  • Как заставить работать root сокет на android?

    @xverizex Автор вопроса
    А, вспомнил, ошибка сокета вроде была operation not permited.
  • Как найти синус 10 градусов?

    @xverizex Автор вопроса
    Этим я могу найти синус приблизительный.
  • Как найти синус 10 градусов?

    @xverizex Автор вопроса
    Сергей Соколов: Я нашёл формулу pi * угол / 180. Или она подходит только для малых углов?
  • Как найти синус 10 градусов?

    @xverizex Автор вопроса
    А всё, увидел формулу.
  • Как найти синус 10 градусов?

    @xverizex Автор вопроса
    А чем тогда радианы от синуса отличаются, если ответ почти такой же?