Thread View: pl.comp.lang.c
1 messages
1 total messages
Started by Slon
Mon, 24 Nov 1997 17:33
RE: Ktos wie jak to sie robi???
Author: Slon
Date: Mon, 24 Nov 1997 17:33
Date: Mon, 24 Nov 1997 17:33
82 lines
2975 bytes
2975 bytes
On Mon, 24 Nov 1997, Krzysztof Murkowski wrote:
> Tomasz Grabowski wrote:
> >
> > Mam jakis ciag znakow *argvc[] - niech to bedzie np. nazwa pliku
> > "plik.txt". Teraz chcialbym (pod Unixem) aby moj program odpalil np.
> > program "vi" wraz z ta nazwa "plik.txt". Ktos wie jak to sie robi???
>
> #include <stdlib.h>
> ...
> char string[100];
> ...
> system( strcat(strcpy( string, "/usr/bin/vi "), argvc[0] ) );
>
> --
> Krzysztof Murkowski
> mailto:murek@ml.put.poznan.pl
> http://www.ml.put.poznan.pl/~murek
>
Ok, tyle, ze jezeli to "*argvc[]" jest drugim parametrem main()
to argvc[0] jest nazwa pliku programu, a nie parametrem "plik.txt" !
Tomek - "*argvc[]" jest tablica wskazan do ??? ( zapewne 'char' ),
wiec musisz wiedziec, ktory z tych stringow ma byc parametrem
dla vi. Jezeli cala tablica argvc ma byc przekazana, to oczywiscie
mozna posklejac linie wywolania, tak jak to pokazal Krzysztof, ale
jest to ciutke niewygodne, bo trudno okreslic statycznie rozmiar
'char string[???]', tak aby go nie przepelnic !
Przy zalozeniu ze chodzi o uruchomienie vi z parametrami wywolania
programu rodzicielskiego, zaproponowal bym Ci raczej cos takiego:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#define PROG "/usr/bin/vi"
...
int main ( int argc, char * argv[] )
{ pid_t pid;
int rval;
int ret;
...
switch (pid=fork())
{
case -1 : /* Proces rodzicielski - padl fork() */
ret=-1;
break;
case 0 : /* Proces potomny - uruchom PROG */
argv[0]=PROG;
execv(PROG,argv);
return errno;
default : /* Proces rodzicielski - czekaj na zakonczenie 'pid' */
ret=waitpid(pid,&rval;0);
break;
}
/* W tym miejscu jeseli 'ret!=-1', mozesz sprawdzac
* kod powrotu z procesu potomnego przy pomocy makr
* wstat(5) ! To bedzie kod z PROG jeseli execv()
* wykonal sie poprawnie ! Jezeli 'ret==-1' to albo
* padl fork() albo waitpid() zostal przerwany z
* innego, niz zakonczenie procesu 'pid', powodu
* ( np. sygnalem ).
*/
...
}
Oczywiscie fork() ma sens tylko, gdy jest cos do zrobienia po wykonaniu
edycji przy pomocy vi, waitpid() jest potrzebne tylko wtedy, gdy program
rodzicielski musi czekac na zakonczenie edycji, itd ...
Pozdrowienia ... Slon
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads