Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кто нибудь знает, какая команда ставит на паузу программу в Linux?

Илья Горбачев Знаток (330), на голосовании 2 дня назад
Сейчас я работаю над одним проектом, и возникла потребность в написании остановки программы в некотором месте до нажатия клавиши пользователем. Есть ли какие-то альтернативы команде `system("pause")` в windows на linux?
Голосование за лучший ответ
Panic Doctor Просветленный (44112) 1 месяц назад
 #include <stdio.h> 

int getchar(void);
Илья ГорбачевЗнаток (330) 1 месяц назад
эта команда встроена в ввод символов пользователем, а я имею ввиду функцию API Linux'а, или что-то вроде того
Panic Doctor Просветленный (44112) Илья Горбачев, это то, что требуется из условия. функция будет ждать ввода символа, что практически равносильно нажатию клавиши. у Linux нет никаких API кроме системных вызовов. так что уточните чем не годится int getchar(void);
Илья ГорбачевЗнаток (330) 1 месяц назад
В любом случае спасибо за ответ, это работает, просто хотел узнать есть ли какие-либо системные вызовы линукса, с помощью которых можно как и на windows останавливать программу до нажатия клавиши.
Panic Doctor Просветленный (44112) Илья Горбачев, до нажатия клавиш нельзя. есть системный вызов pause(void), который переводит процесс в сон до поступления сигнала. другие способы заблокироваться — это блокирующие операции такие как read/write
etar125 Гуру (3966) 1 месяц назад
 #include <iostream> 
#include <termios.h>

static struct termios stored_settings;

void set_keypress(void) {
struct termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
// Отключение канонического режима и эхо
new_settings.c_lflag &= ~(ICANON | ECHO);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
return;
} void reset_keypress(void) {
tcsetattr(0,TCSANOW,&stored_settings);
return;
}

int main() {
set_keypress();
char c;
std::cout << "Тут типа пауза...\n";
std::cin >> c;
std::cout << "Нажми че-то, чтобы выйти...\n";
std::cin >> c;
reset_keypress();
return 0;
}
Это?
Николай Веселуха Высший разум (368761) 1 месяц назад
 #include <chrono> 
#include <iostream>
#include <thread>

namespace user {
void sleep(const intmax_t delay) {
const auto s = std::chrono::system_clock::now() + std::chrono::seconds(delay);
std::this_thread::sleep_until(s);
}
void clear() {
std::cout << "\x1B[2J\x1B[H";
// std::cout << "\033c"; // Linux
}
void pause(const char* prompt = "") {
std::cout << prompt;
while (std::cin.get() != '\n');
}
}

int main() {
constexpr auto delay = 5LL;
std::cout << "This is a " << delay << " second pause\n";
user::sleep(delay);
user::clear();
user::pause("Press any key... ");
std::cout << "Is this what you need?\n";
user::pause();
}
Илья ГорбачевЗнаток (330) 1 месяц назад
Спасибо, забыл указать что мне нужен код на си.
Николай Веселуха Высший разум (368761) Илья Горбачев, бывавет. Я верю, что в следующий раз вы будете более внимательны, задавая свои вопросы и вам обязательно повезёт!
Похожие вопросы