պլհկ
Добро пожаловать в х-ль
Αλεχ
У меня такой вопрос
Αλεχ
есть сишечная запись extern FOO *bar;
Αλεχ
можно к этой структуре обратиться из раста?
Маjко
Она даже в си extern
Маjко
Ну по идее extern "C" { static bar: *mut FOO; }
Маjко
https://github.com/rust-lang/rust/issues/35112
Маjко
Но тебе надо будет сделать свой FOO в растокоде
Маjко
С #[repr(C)], такого же размера
Berkus
или напустить на сишечку bindgen
Маjко
Или так
mAX
товарищи, с tokio разбираюсь..помогите,пожалуйста! я так понял он основан на mio и я смог сделать на mio простой ивент луп, прицепил к нему пайп и в цикле сообщений получать что в него пишут из другого потока) теперь хоче сделать такое же для tokio, все примеры в оснонвом на сеть завязаны..и немного устарели, раньше был tokio_core вот тупой пример для таймера let task = ::tokio::timer::Interval::new(Instant::now(), Duration::from_millis(100)) .for_each(|instant| { println!("fire"); Ok(()) }) .map_err(|e| panic!("interval errored; err={:?}", e)); ::tokio::run(task); как можно сделать task, который будет принимать данные из pipe_rx? let stdin = pipe_rx; let stdin_fd = ::std::os::unix::io::AsRawFd::as_raw_fd(&stdin); let fdin_e = ::mio::unix::EventedFd(&stdin_fd); let reg = ::tokio::reactor::Registration::new(); reg.register(&fdin_e); let ev = ::tokio::reactor::PollEvented2::new(fdin_e); вот такой пример для stdin нашел, но как его превратить в task и присоединить к основному циклу не понимаю
պլհկ
воу воу
Маjко
Нужно сделать твой pipe_rx стримом, проще говоря реализовать для него future::Stream
Маjко
И дальше pipe_rx.for_each(process_event)
պլհկ
надо взять готовую обертку для пайпа
Маjко
Или так)
պլհկ
https://docs.rs/tokio/0.1.6/tokio/io/struct.Stdin.html
Loo
надо взять готовую обертку для пайпа
Так: взять готовую обёртку или херачить свой велосипед
Loo
Яя выбираю велосипед
mAX
Понятно, буду пробовать) Либу не хочется, хочется разобраться руками)
mAX
Спасибо!!
Макс
Так: взять готовую обёртку или херачить свой велосипед
зависит от целей у меня на расте например пока только проекты, которые я делаю, чтобы научиться расту, так что в каждой такой ситуации делаю оба варианта одновременно
Αλεχ
С #[repr(C)], такого же размера
на самом деле я про extern FILE *stdin
Αλεχ
но я не могу нигде найти его описания
Αλεχ
не спрашивай, зачем мне сишный инпут
Roma
на самом деле я про extern FILE *stdin
https://github.com/nix-rust/nix/tree/master/src а тут нету файлов?
Αλεχ
я хочу побенчить fgets против стандартного stdin
Αλεχ
и мне низя пользоваться сторонними крейтами
Маjко
я хочу побенчить fgets против стандартного stdin
Напиши 2 функции на сишке и зацепи их экстерном
պլհկ
ща бы libc побенчить
Маjко
И их бенчи
Αλεχ
нигде этой инфы нет
Αλεχ
Напиши 2 функции на сишке и зацепи их экстерном
я хочу затестить stdin.lock().read_line().next().unwrap() против сишечной fgets
Αλεχ
я не могу ничего импортировать
Αλεχ
я могу только один main.rs написатть
Αλεχ
всё
Маjко
???
Αλεχ
условия тестирования
Cat
на плейграунде что ли пишешь?
Αλεχ
я отсылаю на стороннюю машину один файлик текстовый
Αλεχ
да
Αλεχ
только хуже
Αλεχ
ибо на плейграунде можно импортить некоторые крейты, а тут нельзя
Маjко
я отсылаю на стороннюю машину один файлик текстовый
Ты знаешь архитектуру на прейграунде?
Αλεχ
Αλεχ
но смысл тот же
Маjко
у меня другой плейграунд
Не важно, ты знаешь на чем он?
Αλεχ
нет
Αλεχ
а это важно?
Маjко
Как шизоидный выход из ситуации: скомпилировать локально, взять опкоды из сишной функции, включить их в файл как статический массив, трансмутнуть в сишный указатель на ф-ю, запускать в бенче
Αλεχ
погоди
Αλεχ
я могу вызвать сишные функции
Αλεχ
стандартные
Αλεχ
но я не могу обернуть их
Αλεχ
простой выход - найти где-то описание дескриптора stdin
Маjко
Он зависит от конкретной libc
Αλεχ
и сделать такой же с repr C
Маjко
Если ты не знаешь что там — тебе это не поможет
Маjко
Но вообще это указатель
Маjко
Так что вешай void
Маjко
И всё
Маjко
Тебе же только передать его
Маjко
А не лезть в кишки структуры FILE
Маjко
У stdin есть стандартный номер дескриптора
Маjко
Дерни на него open, получишь указатель на FILE, для тебя это будет void*
Маjко
Передаешь указатель в fgets
Маjко
Должно сработать
Αλεχ
fuf
Αλεχ
ага
Αλεχ
ща попробую
Αλεχ
спасибо
Маjко
Отпишись, если получится)
Αλεχ
http://man7.org/linux/man-pages/man2/open.2.html - ток я не вижу open который принимает имя дескриптора)
պլհկ
не опен, а fopen
Roma
я хочу побенчить fgets против стандартного stdin
"побенчить реализацию fgets в неизвестно какой libc против растового stdin"
Αλεχ
именно так
պլհկ
а на самом деле fdopen