[ _tux_rulez @ 06.07.2003. 16:17 ] @
zanima me jedna "jednostavna" stvar - kako da pomoću kaylixa (delphi) šaljem komande terminalu i ponovo ucitavam response tih komandi, odnosno da npr dodijelim kod nekom objektu UKLONI PROGRAM ICedEarth - da posalje komandu rpm -e icedearth ...ili vec neku drugu glupost
[ Dejan Lozanovic @ 06.07.2003. 22:41 ] @
hmm, pazi ovo pitanje nema mnogo veze bash tacno sa delphijem, u sustini pogledaj kako iz kylixa da zoves sitemske pozive. u sustini tebi treba pipe ako ces da vrsis komunikaciju sa programom, tj da mu pises na stadardni ulaz ili da citas program sa standardnog izlaza. u principu pogledaj ovo:

man 2 pipe
man 2 fork
man 2 dup2
man 3 exec

tu je sve sto ti je potrebno u principu. Koristiti system funkciju i nije tako pametno. Ako ti treba detaljnije objasnjenj poslacu ti C primer.
[ silverglider @ 07.07.2003. 12:08 ] @
Sve ovo imas definisano u Libc unitu - pogledaj source u:
<kylix dir>/source/rtl/linux/libc.pas

Pogledaj tu funkciju 'popen'.
[ _tux_rulez @ 16.10.2003. 00:39 ] @
Evo mali programcic na ovu temu, medjutim radi se o pokrecanju grafickih programa:

uses Libc;

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
prog : String;
Result : Integer;
begin
 prog := Edit1.Text;
 Result := Libc.system(PChar(prog));
 if Result = -1 then
 begin
  ShowMessage('Ne postoji komanda');
 end;
 close;
end;


Međutim progic, ne radi kada se direktno pokrene iz kylix, IDE-a, ali onaj kompajlirani exe, koji ostane, kada se samo on pokrene, van kylix IDE-a, progic radi. Ne znam do cega je. Također jedna stvar, kada pokrenem npr. Mozillu progic se zaglavi, jednostavno ceka dok mozilla ne zavrsi sa radom, pa se onda odglavi. Kako ovo rijesiti? Znaci da ne ceka dok se zavrsi rad pokrenutog Programa?
HAIL
[ _tux_rulez @ 16.10.2003. 00:47 ] @
Također kako koristiti sljedeću funkciju, odnosno kako joj slati parametre i sl.

Uses Libc;
Code:
 function StartApp(name: string; arguments: array of string;waitfor:boolean=false): Integer;
var
  pid: PID_T;
  Max: Integer;
  I: Integer;
  parg: PPCharArray;
  argnum: Integer;

begin
  Result := -1;

  pid := fork;

  if pid = 0 then
  begin
    Max := sysconf(_SC_OPEN_MAX);
    for i := (STDERR_FILENO+1) to Max do
    begin
      fcntl(i, F_SETFD, FD_CLOEXEC);
    end;

    argnum := High(Arguments) + 1;

    GetMem(parg,(2 + argnum) * sizeof(PChar));
    parg[0] := PChar(Name);

    i := 0;

    while i <= high(arguments) do
    begin
      inc(i);
      parg[i] := PChar(arguments[i-1]);
    end;

    parg[i+1] := nil;
    execvp(PChar(name),PPChar(@parg[0]));
    halt;
  end;

  if pid > 0 then
  begin
    if waitfor then begin
        result:=-1;
        while (result=-1)  do begin
            application.processmessages;
            waitpid(pid,@Result,wnohang);
        end;
    end;
  end;
end;
[ Milos D @ 16.10.2003. 19:10 ] @
Deluje da ta funkcija moze da pokrene program bez da ceka na kraj njegovog izvrsavanja. Parametre prosledjujes verovatno ovako:

StartApp ('/nekipath/nekiprogram', ['-prvi_parametar', '-drugi_parametar'])
[ _tux_rulez @ 18.10.2003. 16:26 ] @
DA, u pravu ste. StartApp funkcija nije moja kreacija, dok ova procedure TForm1.Button1Click(Sender: TObject); 'jeste', zato sam postavio to pitanje za ovu proceduru. Znaci, kako i sta uraditi da program se ne zaledi, sve dok se pokrenuta aplikacija ne ugasi.

Unaprijed Hvala
[ Milos D @ 19.10.2003. 18:55 ] @
Hvala na ovom kodu, bas sam trazio takvu funkciju. Ne znam kakvih problema imas sa njom, ali meni radi. Na primer, ovo:

StartProgram ('/usr/bin/mozilla', ['/usr/home/someone/test.html']);

sasvim lepo otvara navedeni fajl u browser-u, pri cemu sam program ostaje ziv, tj. ne ceka da se browser iskljuci. Ako sam dobro shvatio princip rada, ovaj fork je veoma zanimljiva stvar.
[ _tux_rulez @ 20.10.2003. 15:05 ] @
http://grungy.lugze.org/doc_ware/

Dobar dokumenat, na ovu temu....