Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: mironcho в Jan 14, 2003, 23:30



Титла: C / system()  въпросче
Публикувано от: mironcho в Jan 14, 2003, 23:30
Здравейте,
значи в една C програмка извиквам system() . Как да я накарам да не прекъсва изпълнението на програмата при възникването на грешка при изпълнение на задаената и команда ?
В man page -а пише че връща '-1' - проверявам си за това, но явно програмата изобщо не стига до там, а се 'терминира' по рано от system() ... Естествено, при подадена валидна команда на system() , проблеми няма ;)


Титла: C / system()  въпросче
Публикувано от: в 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;
}


Титла: C / system()  въпросче
Публикувано от: mironcho в 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' на екрана ;)
Програмата няма suid или sgid привилегии ...


Титла: C / system()  въпросче
Публикувано от: в 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()  въпросче
Публикувано от: в Jan 15, 2003, 14:02
Ама къв съм завеян ... та да си довърша мисълта, вместо system(....) ползваш spawn(). Това е.

Успех


Титла: C / system()  въпросче
Публикувано от: mironcho в Jan 15, 2003, 14:50
Мерси. Винаги се опитвам първо по най лесния начин :) Ще разуча fork() и exec..() функциите.


Титла: C / system()  въпросче
Публикувано от: mironcho в Jan 15, 2003, 14:58
Забrunравих да ти кажа каква програмка правя - GTK2 програмка дето стартира въведената от теб команда ... Нещо от сорта на krun (майче така се казваше).