Автор Тема: C / system()  въпросче  (Прочетена 1952 пъти)

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
C / system()  въпросче
« -: Jan 14, 2003, 23:30 »
Здравейте,
значи в една C програмка извиквам system() . Как да я накарам да не прекъсва изпълнението на програмата при възникването на грешка при изпълнение на задаената и команда ?
В man page -а пише че връща '-1' - проверявам си за това, но явно програмата изобщо не стига до там, а се 'терминира' по рано от system() ... Естествено, при подадена валидна команда на system() , проблеми няма '<img'>
Активен

  • Гост
C / system()  въпросче
« Отговор #1 -: Jan 15, 2003, 09:48 »
Би ли постнал кода, щото не става много ясно кое къде се терминира, преди system() или вътре в него, ако е вътре в него прочете ли там за suid и sgid и другите ограничения при ползването на тази фунция? А ако е само невалидна командата при мен това върви и програмата завъшва с 0:
int main(void)
{
int rc;

 rc=system("ala bala");
 printf("RC is %i \n",rc);
 return 0;
}
Активен

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
C / system()  въпросче
« Отговор #2 -: Jan 15, 2003, 11:15 »
gboolean exec_command( GtkWidget *widget,
      gpointer data )
{
   gchar buff[COMMAND_LENGTH];
   
   strncpy ( buff, GTK_ENTRY (widget)->text, COMMAND_LENGTH-3 );
   strncat ( buff, " &", 2 );
   
   if ( -1 == ( system( buff )) ) {
#ifdef DEBUG
      g_print ("-1\n");
#endif
   }
   
   gtk_main_quit ();
   return FALSE;
}

DEBUG ми е дефинирано по горе в програмата и при неуспех би трябало да ми се отпечата '-1' на екрана '<img'>
Програмата няма suid или sgid привилегии ...
Активен

  • Гост
C / system()  въпросче
« Отговор #3 -: Jan 15, 2003, 13:33 »
Еее ама ти съвсем по най-лесния начин си тръгнал :)))
Всичко много хубаво до "strncat ( buff, " &", 2 );" Коректният начин е да си напишеш функциика, нещо от сорта на:
int spawn(char *args[]...)
{
 if (fork()>0)
 {
   execv(args...);
   exit(127);
 }
 waitpid(...);
 return 0;
}
Вече в зависимост какво искаш да прави като цяло програмата ти почети за exec... функциите и waitpid()

Успех
Активен

  • Гост
C / system()  въпросче
« Отговор #4 -: Jan 15, 2003, 14:02 »
Ама къв съм завеян ... та да си довърша мисълта, вместо system(....) ползваш spawn(). Това е.

Успех
Активен

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
C / system()  въпросче
« Отговор #5 -: Jan 15, 2003, 14:50 »
Мерси. Винаги се опитвам първо по най лесния начин '<img'> Ще разуча fork() и exec..() функциите.
Активен

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
C / system()  въпросче
« Отговор #6 -: Jan 15, 2003, 14:58 »
Забrunравих да ти кажа каква програмка правя - GTK2 програмка дето стартира въведената от теб команда ... Нещо от сорта на krun (майче така се казваше).
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Slackware i  config na  Scannerl
Хардуерни и софтуерни проблеми
max_paine 0 1339 Последна публикация Apr 14, 2003, 11:29
от max_paine
Мазало с lilo  & windows boot manager  - Помощ!
Настройка на програми
ven 2 3276 Последна публикация Oct 17, 2005, 14:05
от RealUseR
Check your system clock
Настройка на програми
sash 6 1655 Последна публикация Mar 05, 2006, 21:49
от
System.map not fould
Настройка на програми
boyan7640 5 1220 Последна публикация Apr 10, 2006, 10:26
от rat
Linux  и   autocad 2007
Идеи и мнения
valjo_vt 12 7204 Последна публикация Apr 07, 2007, 21:09
от winman