nahrada volani system() pomoci exec s presmerovanim

Petr Skoda skoda na sunstel.asu.cas.cz
Středa Duben 29 13:42:41 CEST 1998


On Tue, 28 Apr 1998, Pavel Kankovsky wrote:

> > Warning: dev (04:41) tty->count(1) != #fd's(2) in release_dev
> > rs_close: bad serial port count; tty->count is 1, info->count is 0
> > release_dev: bad tty->count (-1) for ttyS1
> 
> Ted si vzpominam, ze jsem to parkrat videl se starsim kernelem na
> pseudoterminalech. Vyznam hlasky je ten, ze citac pocitajici, kolikrat je
> urcity jaderny objekt pouzivan, nesouhlasi se skutecnosti. Procez
> doporucuji aktualizovat jadro.

Je to standardni RH5.0 z Yenyovy CDR distribuce (palene na Cikhaji)
tedy jadro 2.0.32 verze  #1 Wed Nov 19 00:46:45 EST 1997
Je tedy spatne prave v oblasti seriove komunikace ? - tedy je ona hlaska
normalni pri aktivite portu (u mysi zrejme ne)?

> 
> > main(argc,argv)
> > {
> >   struct timeval tvm;
> >   int retvalm;
> >   FILE *fp1;
> > 
> >         while(1)
> >         {
> >         fp1=fopen("/home/nassystem/comfile","rt");
> >         if(fp1==NULL)
> >          { /*fprintf(stderr,"Error open comfile for read \n")*/;}
> 
> Tady by bylo docela pekne dat nejake cekani, aby zbytecne nezhavil
> procesor.

            jeste jine cekani nez onech 200ms uvedenych dole volanim
select ?


> >          else
> >          {
> >           fclose(fp1);
> >           system("/usr/local/bin/radic </home/nassystem/comfile");
> >           tvm.tv_sec=0;
> >           tvm.tv_usec=200000;
> >           retvalm=select(1,NULL,NULL,NULL,&tvm);
> 
> To, jak se zbavit system() tady uz nekdo popisoval, takze nebudu nosit
> drivi do lesa. Nicmene mam dotaz: umi si "radic" poradit s cr/lf?
> 
ANo, to uz jsem implementoval (a precetl si par knizek - kapitolu fork,dup
apod) 
Ohledne cr/lf - to je zajimave - ja je pisu v DOSU do souboru montovanem z
linuxu - tedy CRLF, ale kdyz se na ne divam na linuxu - jsou bez meziradky
tedy unixove - asi to dela ten NFS driver pod dosem. Ale stejne tak to
testuju primo v linuxu - vytvorim pomocny comfile pod vi a zkopiruju
na vlastni comfile pomoci cp , nebo rovnou mv.
> >           system("rm /home/nassystem/comfile");
> 
> Jezisi Kriste, proc lidi delaji tohle? (co je spatne na
> unlink(jmeno_souboru)?)

Uz jsme to taky predelali na remove() - BTW jaky je rozdil mezi remove a
unlink ? Man page jsou temer doslova stejne s rozdilem #include knihovny
stdio vs. unistd. - Co je co ?
> > 
> >          }
> >       } 
> 
> Aha. A jak je mu predkladan ten soubor. Je to tak, ze je nejdrive vyroben
> pod jinym jmenem, a pak, kdyz je hotovy, prejmenovan? P
ANO tak - v linuxu mezisoubor kopiruji, ci mv (chova se co do tuhnuti
stejne - statisticky vzato) Pod dosem volam Rename v TP5.5 na NFS
mountovany.

Pokud to nekomu bude uzitecne uvedu nase zatim konecne reseni:

#define COMFILE "/home/nassystem/comfile"
#define RADIC "/usr/local/bin/radic"

main(argc,argv)
{
int fp1;
while(1)
{
  if (fp1=open(COMFILE, O_RDONLY) > 0) {
    close(fp1);
    if (fork()==0){
      if (fp1=open(COMFILE, O_RDONLY) > 0) {
        close(0);
        dup(fp1);
        close(fp1);
        execl(RADIC, "radic",  NULL);
      }
    }
    wait(NULL);
    remove( COMFILE );
  }
  usleep(200000);
}
}

Zda se, ze to tuhne min, ale stejne .

Jeste zkusime s kolegou presunout vykonnou cast programu radic (tu ktera
rozpoznava prikaz z COMFILE a posila patricne kody na seriovy port) primo
do programu EXECUTOR, aby se vubec nevolal dalsi program.




Kdyz vidim, ze je o nas problem zajem (uz 2 lide pomohli), rad bych ten
problem jeste rozsiril o cast zpusobu komunikace na seriovem portu-
protoze by to mohlo asi zajimat vice lidi poslu to s novym subjektem.




************************************************************************* 
*  Petr Skoda                         Tel   : (0204) 649201, l. 361     * 
*  Stelarni oddeleni                          (0204) 620361, 620136     *
*  Astronomicky ustav AVCR            Fax   : (0204) 620250             *
*  251 65 Ondrejov                    e-mail: skoda na sunstel.asu.cas.cz  *
*  Ceska republika                            pskoda na mbox.cesnet.cz     *
*************************************************************************






Další informace o konferenci Linux