պլհկ
Добро пожаловать в х-ль
Αλεχ
У меня такой вопрос
Αλεχ
есть сишечная запись 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ко
Или так
պլհկ
воу воу
Ма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
Яя выбираю велосипед
mAX
Понятно, буду пробовать)
Либу не хочется, хочется разобраться руками)
mAX
Спасибо!!
Αλεχ
но я не могу нигде найти его описания
Αλεχ
не спрашивай, зачем мне сишный инпут
Αλεχ
я хочу побенчить fgets против стандартного stdin
Αλεχ
и мне низя пользоваться сторонними крейтами
պլհկ
ща бы libc побенчить
Маjко
И их бенчи
Αλεχ
нигде этой инфы нет
Маjко
Αλεχ
я не могу ничего импортировать
Αλεχ
я могу только один main.rs написатть
Αλεχ
всё
Маjко
???
Αλεχ
условия тестирования
Cat
на плейграунде что ли пишешь?
Αλεχ
я отсылаю на стороннюю машину один файлик текстовый
Αλεχ
да
Αλεχ
только хуже
Αλεχ
ибо на плейграунде можно импортить некоторые крейты, а тут нельзя
Ма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
Αλεχ
именно так
Маjко
պլհկ
а на самом деле fdopen