Форум русскоязычного сообщества Ubuntu


Автор Тема: Си: system выполняется раньше printf  (Прочитано 1523 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MrModest

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
  • HP Pavilion dv6 3305er
    • Просмотр профиля
    • MrModest in MAL
Си: system выполняется раньше printf
« : 07 Февраль 2014, 00:30:21 »
Вот содержание файла consol.c

#include <stdlib.h>
#include <stdio.h>

int main(){
printf("Вы здесь ");
// system ("sleep 2");
system("pwd");
printf ("\n");
system("echo 'example!' ");
printf ("\n");
}

вывод терминала

kamil@MrModest:~$ gcc consol.c -o consol
kamil@MrModest:~$ ./consol
/home/kamil
Вы здесь
example!

kamil@MrModest:~$ gcc consol.c -o consol
kamil@MrModest:~$ ./consol
/home/kamil
Вы здесь
example!

kamil@MrModest:~$

почему system выполняется раньше и как с этим бороться?
Windows 10 Pro x64       | Ubuntu 14.04 amd64
Intel Core i5 @ 2.67 GHz | AMD Radeon HD 6550M 1Gb (Notebook Graphics)
RAM: 8Gb | HDD: 500Gb (Ubuntu-49Gb, SWAP-1Gb, Windows-100Gb, Storage-330G

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #1 : 07 Февраль 2014, 00:36:10 »
system("echo -n 'example!' ");
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн MrModest

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
  • HP Pavilion dv6 3305er
    • Просмотр профиля
    • MrModest in MAL
Re: Си: system выполняется раньше printf
« Ответ #2 : 07 Февраль 2014, 00:40:48 »
system("echo -n 'example!' ");
это я знаю, что бы строку не переводил вроде..
Проблемы неверной очередности не решает… =(
Windows 10 Pro x64       | Ubuntu 14.04 amd64
Intel Core i5 @ 2.67 GHz | AMD Radeon HD 6550M 1Gb (Notebook Graphics)
RAM: 8Gb | HDD: 500Gb (Ubuntu-49Gb, SWAP-1Gb, Windows-100Gb, Storage-330G

Онлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 4994
  • Все по палатам!
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #3 : 07 Февраль 2014, 00:51:41 »
Вызови fflush перед system
(man fflush)
Извините, я все еще учусь

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #4 : 07 Февраль 2014, 00:58:44 »
int main(){
setbuf( stdout , NULL );

и не надо fflush форева  ;)

или fprintf(stderr, "Печатает немедленно, без буферизации");
« Последнее редактирование: 07 Февраль 2014, 01:11:06 от golota »
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #5 : 07 Февраль 2014, 01:01:31 »
popen?

Пользователь решил продолжить мысль 07 Февраль 2014, 01:04:37:
Вызови fflush перед system
(man fflush)
точно))
« Последнее редактирование: 07 Февраль 2014, 01:04:37 от victor00000 »
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7169
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #6 : 07 Февраль 2014, 01:07:38 »
system - зло. Его лучше не использовать, поскольку в маломальски-взаимодействующей через него системе это превращается в одну большую проблему. Лучше popen, если тебе надо вывод обрабатывать, например. А вообще - костыли всё это.

Оффлайн MrModest

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
  • HP Pavilion dv6 3305er
    • Просмотр профиля
    • MrModest in MAL
Re: Си: system выполняется раньше printf
« Ответ #7 : 07 Февраль 2014, 01:16:34 »
setbuf( stdout , NULL );
помогло.. заметил странность.. если перед системмм стоит ptintf, в конце которого есть \n то он выпооняется перед system.. остальные после.. это без сетбаф.. с ним все работает нормально в порядке написания строчек...

Пользователь решил продолжить мысль 07 Февраль 2014, 01:18:31:
мне нужно управлять некотором функционалом системы через программу.. добавлять/удалять репозитории.. удалять/устанавливать софт.. а для этого нужны строки баша =/ или есть иной способ?
« Последнее редактирование: 07 Февраль 2014, 01:18:31 от MrModest »
Windows 10 Pro x64       | Ubuntu 14.04 amd64
Intel Core i5 @ 2.67 GHz | AMD Radeon HD 6550M 1Gb (Notebook Graphics)
RAM: 8Gb | HDD: 500Gb (Ubuntu-49Gb, SWAP-1Gb, Windows-100Gb, Storage-330G

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #8 : 07 Февраль 2014, 01:33:53 »
Для буферизованных устройств вывод выполняется
1) буффер заполнен
2) записано NEWLINE \n
3) или прирудительно flush

Пользователь решил продолжить мысль 07 Февраль 2014, 01:36:39:
мне нужно управлять некотором функционалом системы через программу.. добавлять/удалять репозитории.. удалять/устанавливать софт.. а для этого нужны строки баша =/ или есть иной способ?
Это вы по поводу system() ?
Зачем прогу на си писать ??? bash awk perl - вот правильный выбор для таких целей

Прграмма будет постоянно висеть в памяти ? Программа требует мгновенной реакции ?
Если нет, то нечего корячится на си. (если только для тренировки и освоения языка)
« Последнее редактирование: 07 Февраль 2014, 01:40:09 от golota »
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн MrModest

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
  • HP Pavilion dv6 3305er
    • Просмотр профиля
    • MrModest in MAL
Re: Си: system выполняется раньше printf
« Ответ #9 : 07 Февраль 2014, 01:41:14 »
golota,
с перлом не знаком.. на баше многа текста получится.. нужно будет подобие менюшки сообразить с пунктами...
Windows 10 Pro x64       | Ubuntu 14.04 amd64
Intel Core i5 @ 2.67 GHz | AMD Radeon HD 6550M 1Gb (Notebook Graphics)
RAM: 8Gb | HDD: 500Gb (Ubuntu-49Gb, SWAP-1Gb, Windows-100Gb, Storage-330G

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #10 : 07 Февраль 2014, 01:44:42 »
MrModest,
zenity --info
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #11 : 07 Февраль 2014, 01:51:45 »
с перлом не знаком.. на баше многа текста получится.. нужно будет подобие менюшки сообразить с пунктами...
на си, в любом случае, получится в несколько раз больше.
Прога консольная или гуёвая ?
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн MrModest

  • Автор темы
  • Активист
  • *
  • Сообщений: 336
  • HP Pavilion dv6 3305er
    • Просмотр профиля
    • MrModest in MAL
Re: Си: system выполняется раньше printf
« Ответ #12 : 07 Февраль 2014, 01:56:07 »
golota,
консольная.. с графическими библиотеккми пока незнаком...
Windows 10 Pro x64       | Ubuntu 14.04 amd64
Intel Core i5 @ 2.67 GHz | AMD Radeon HD 6550M 1Gb (Notebook Graphics)
RAM: 8Gb | HDD: 500Gb (Ubuntu-49Gb, SWAP-1Gb, Windows-100Gb, Storage-330G

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #13 : 07 Февраль 2014, 02:03:27 »
Если решил писать консольные диалоги на си, смотри в сторону ncurses
Сильно поможет
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7169
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Си: system выполняется раньше printf
« Ответ #14 : 07 Февраль 2014, 03:51:27 »
MrModest, через popen делай, если на си или плюсах, но BASH имхо лучше для этих целей. Если псевдографики хватит, то ncurses, если нет - FLTK смотри и плюсы или GTK и Си.

 

Страница сгенерирована за 0.168 секунд. Запросов: 24.