URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10396
[ Назад ]

Исходное сообщение
"socat, как оно это делает?"

Отправлено cods , 18-Авг-21 14:13 
мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно было полноценно делать read/write, подскажите какой алгоритм действий?

Содержание

Сообщения в этом обсуждении
"socat, как оно это делает?"
Отправлено бородач , 19-Авг-21 16:56 
> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
> было полноценно делать read/write, подскажите какой алгоритм действий?

мб через unix socket + thread на обработку данных?


"socat, как оно это делает?"
Отправлено . , 21-Авг-21 01:11 
>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>> было полноценно делать read/write, подскажите какой алгоритм действий?
> мб через unix socket + thread на обработку данных?

или, может, mkfifo


"socat, как оно это делает?"
Отправлено ACCA , 19-Авг-21 18:37 
> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
> было полноценно делать read/write, подскажите какой алгоритм действий?

socat так не делает.
Если ты имеешь в виду "bidirectional pipe", то Linux так не делает. man 7 pipe. Можно в BSD.

Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).


"socat, как оно это делает?"
Отправлено cods , 20-Авг-21 17:54 
>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>> было полноценно делать read/write, подскажите какой алгоритм действий?
> socat так не делает.
> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
> man 7 pipe. Можно в BSD.
> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).

завернуть stdio/stdout в один дескриптор rw как?



"socat, как оно это делает?"
Отправлено муу , 20-Авг-21 20:11 
>>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>>> было полноценно делать read/write, подскажите какой алгоритм действий?
>> socat так не делает.
>> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
>> man 7 pipe. Можно в BSD.
>> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).
> завернуть stdio/stdout в один дескриптор rw как?

https://man7.org/linux/man-pages/man3/stdout.3.html


"socat, как оно это делает?"
Отправлено cods , 21-Авг-21 01:57 
>>>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>>>> было полноценно делать read/write, подскажите какой алгоритм действий?
>>> socat так не делает.
>>> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
>>> man 7 pipe. Можно в BSD.
>>> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).
>> завернуть stdio/stdout в один дескриптор rw как?
> https://man7.org/linux/man-pages/man3/stdout.3.html

мне нужно !два! десткриптора stdin и stdout завернуть в один дескриптор, где там в вашем мане это?


"socat, как оно это делает?"
Отправлено AnonymPatient , 21-Авг-21 09:33 
...

> мне нужно !два! десткриптора stdin и stdout завернуть в один дескриптор, ...

или в ядро ОС, лезть или прослойку(слой абстракции) в прилжении писать на механизмом опроса(select, kqueue, etc.)



"socat, как оно это делает?"
Отправлено . , 21-Авг-21 11:01 
>>>>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>>>>> было полноценно делать read/write, подскажите какой алгоритм действий?
>>>> socat так не делает.
>>>> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
>>>> man 7 pipe. Можно в BSD.
>>>> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).
>>> завернуть stdio/stdout в один дескриптор rw как?
>> https://man7.org/linux/man-pages/man3/stdout.3.html
> мне нужно !два! десткриптора stdin и stdout завернуть в один дескриптор, где
> там в вашем мане это?

тебе уже написали в первом посте. создаёшь дескриптор, на удобном механизме межпроцессорного взаимодействия (в общем случае unix socket), пишешь/читаешь в/из него. на другом конце перенаправляешь.

другой конец - варианты приседаний:
- select stdin/socket в своём процессе с таймаутом
- select stdin/socket в thread или fork
- 2 thread или 2 fork - раздельно stdin и socket

перенаправление:
- read socket -> write stdout
- read stdin -> write socket


"socat, как оно это делает?"
Отправлено cods , 22-Авг-21 13:19 
> тебе уже написали в первом посте. создаёшь дескриптор, на удобном механизме межпроцессорного
> взаимодействия (в общем случае unix socket), пишешь/читаешь в/из него. на другом
> конце перенаправляешь.

с ручной обработкой в потоке и так было понятно, просто было интересно может быть можно было сделать такое - типа создать свой дексриптор, переопределить ему read/write и отдать его.


"socat, как оно это делает?"
Отправлено . , 22-Авг-21 17:43 
>> тебе уже написали в первом посте. создаёшь дескриптор, на удобном механизме межпроцессорного
>> взаимодействия (в общем случае unix socket), пишешь/читаешь в/из него. на другом
>> конце перенаправляешь.
> с ручной обработкой в потоке и так было понятно, просто было интересно
> может быть можно было сделать такое - типа создать свой дексриптор,
> переопределить ему read/write и отдать его.

в принципе, наверно такой механизм мог бы существовать - объединение 2х pipe дескрипторов в одну обструкцию. но мне кажется это слишком просто/узко. а если кому-то нужно клонировать запись в 2 пайпа и читать из одного? вариантов море.

если я правильно понял. тебе бы мысли формулировать чётче, потому что
> создать свой дексриптор, переопределить ему read/write и отдать его

понять не просто


"socat, как оно это делает?"
Отправлено муу , 21-Авг-21 20:09 
>>>>> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
>>>>> было полноценно делать read/write, подскажите какой алгоритм действий?
>>>> socat так не делает.
>>>> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
>>>> man 7 pipe. Можно в BSD.
>>>> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).
>>> завернуть stdio/stdout в один дескриптор rw как?
>> https://man7.org/linux/man-pages/man3/stdout.3.html
> мне нужно !два! десткриптора stdin и stdout завернуть в один дескриптор, где
> там в вашем мане это?

тебе нужно забыть про програмирование и про компуктеры вообще и полностью
тебе нужно найти работу грузчиком в пятёрочке или гдето там


"socat, как оно это делает?"
Отправлено cods , 22-Авг-21 13:14 
>[оверквотинг удален]
>>>>> socat так не делает.
>>>>> Если ты имеешь в виду "bidirectional pipe", то Linux так не делает.
>>>>> man 7 pipe. Можно в BSD.
>>>>> Вообще толком объясни, что ты хочешь. Походу, ни разу не дескриптор (чего?).
>>>> завернуть stdio/stdout в один дескриптор rw как?
>>> https://man7.org/linux/man-pages/man3/stdout.3.html
>> мне нужно !два! десткриптора stdin и stdout завернуть в один дескриптор, где
>> там в вашем мане это?
> тебе нужно забыть про програмирование и про компуктеры вообще и полностью
> тебе нужно найти работу грузчиком в пятёрочке или гдето там

по вашему тону и знаниям вы сами давно в грузчиках батрачите


"socat, как оно это делает?"
Отправлено pavlinux , 16-Сен-21 13:19 
> давно в грузчиках батрачите

mkfifo -m 666 3; 2>&1 > 3;

Открывай 3, чем хошь и делать read/write


"socat, как оно это делает?"
Отправлено tester , 20-Сен-21 15:11 
>> давно в грузчиках батрачите
> mkfifo -m 666 3; 2>&1 > 3;
> Открывай 3, чем хошь и делать read/write

а вот и нет! только unix socket, потому что именно асинхронное read/write


"socat, как оно это делает?"
Отправлено Ann None , 21-Авг-21 19:54 
> мне в программе нужно завернуть stdin/stdout в дескриптор чтобы через него можно
> было полноценно делать read/write, подскажите какой алгоритм действий?

https://www.opennet.ru/man.shtml?topic=dup2
сюда попробуй