Я не могу понять, как сделать неблокирующий ввод / вывод.Это моя текущая архитектура:
Сервер
- Создать сокет сервера (
socket()
) bind()
для IP на номер порта listen()
для входящих соединений - Ввести
while(1)
loop { accept()
входящее соединение - Создать (
fork()
) нового потомкапроцесс для обработки recv()
ing и send()
ing
Клиент
- Создание клиентского сокета (
socket()
) connect()
сокет клиента к сокету сервера - Введите
while(1)
loop { pipe()
, чтобы создать дескрипторы файлов канала для родительских и дочерних процессов - Чтение пользовательского ввода из
stdin
( ВСЕГДА доступно, т.е. не блокируется) - Spawn (
fork()
) новый дочерний процесс для обработки пользовательского ввода, send()
ing и recv()
вход в серверный сокет и из него - Как только выход дочернего процесса готов,
write()
для родительского
- parent
read()
выходное сообщение от дочернего процессаи распечатать на терминал без блокировки стандартного ввода
Что мне нужно изменить?Я просто хочу иметь возможность вводить сообщение в терминал client , чтобы дочерний процесс клиента связывался с сервером в фоновом режиме, форматировал вывод и все, а затем, как только был готов к выводу, он просто выводилне блокируя меня от ввода большего количества запросов в клиент терминал.
Например, если бы я попросил терминал спать 10 секунд, а затем вернул "Я не сплю!"после того времени прошло.В то же время я мог бы обрабатывать другие запросы без ожидания терминала client .
Enter a command: sleep 10
Enter a command: sendfile text.txt
Enter a command: echo money
money
Enter a command: echo hello
hello
I'm awake!
Enter a command: