Это еще один вопрос типа «pipe-fork-dup-exec». Я пытаюсь создать простую программу, похожую на bash, которая будет запускаться следующим образом: ./prog -c ''. Например, мне нужен такой ввод: ./prog -c 'echo hello | wc', чтобы дать следующее ' 1 1 6\n'. Моя программа сейчас находится на стадии, когда работает простой код без каналов (т.е. без |). Однако мне не удается заставить его работать с трубами. Можете ли вы мне помочь?
Вот мой текущий код
#include
#include
#include
#include
#include
enum { MAX_SIZE = 50,
MAX_ARGS = 20 };
void read_pipe(int *fd) {
if (!fd)
return;
if (fork()) {
close(fd[1]);
int sz;
char buf[1024];
while ((sz = read(fd[0], buf, sizeof(buf))) > 0) {
printf(buf, sz);
}
}
}
int execute(char **args, int *fdin = nullptr, int *fdout = nullptr) {
pid_t pid = fork();
int code = 0;
if (pid) {
pid = fork();
if (pid) {
if (fdin) {
close(fdin[0]), close(fdin[1]);
}
waitpid(pid, &code, 0);
if (fdout) {
close(fdout[1]);
// read_pipe(fdout);
close(fdout[0]);
}
} else {// in child; write to fdout[1], read from fdin[0]
if (fdin) {
// std::cout
Подробнее здесь: https://stackoverflow.com/questions/781 ... e-programm
Простая программа типа bash [закрыта] ⇐ C++
Программы на C++. Форум разработчиков
1710714224
Anonymous
Это еще один вопрос типа «pipe-fork-dup-exec». Я пытаюсь создать простую программу, похожую на bash, которая будет запускаться следующим образом: ./prog -c ''. Например, мне нужен такой ввод: ./prog -c 'echo hello | wc', чтобы дать следующее ' 1 1 6\n'. Моя программа сейчас находится на стадии, когда работает простой код без каналов (т.е. без |). Однако мне не удается заставить его работать с трубами. Можете ли вы мне помочь?
Вот мой текущий код
#include
#include
#include
#include
#include
enum { MAX_SIZE = 50,
MAX_ARGS = 20 };
void read_pipe(int *fd) {
if (!fd)
return;
if (fork()) {
close(fd[1]);
int sz;
char buf[1024];
while ((sz = read(fd[0], buf, sizeof(buf))) > 0) {
printf(buf, sz);
}
}
}
int execute(char **args, int *fdin = nullptr, int *fdout = nullptr) {
pid_t pid = fork();
int code = 0;
if (pid) {
pid = fork();
if (pid) {
if (fdin) {
close(fdin[0]), close(fdin[1]);
}
waitpid(pid, &code, 0);
if (fdout) {
close(fdout[1]);
// read_pipe(fdout);
close(fdout[0]);
}
} else {// in child; write to fdout[1], read from fdin[0]
if (fdin) {
// std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78177156/simple-bash-like-programm[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия