[linux] Re: fuser in actie

Geert Stappers stappers op stappers.nl
Ma Jun 16 21:32:17 CEST 2008


Op 11-06-2008 om 22:34 schreef Geert Stappers:
> [ thread gebroken, was "unmount zegt 'device busy'" ]
> 
> Op 11-06-2008 om 21:57 schreef Wybo Dekker:
> > Geert Stappers wrote:
> > 
> > > Maar nu de "device busy" bekend is, zou ik nog graag
> > > de output `fuser /store/TeX.iso` zien.
> > 
> > Dat liet helemaal niets zien.
> > Vervolgens wat experimenten:
 <knip/>
> > Ben benieuwd of jij daar iets van snapt...
> 
> Jawel, het expriment is slecht uitgevoerd.

Zo heel slecht was het expriment toch ook weer niet.

Er waren wat verrassende resultaten:
1) fuser ziet niet dat /store/TeX.iso een (loop mounted) device is.
2) vi die geen ge-opende files had.

punt 1 kan ik me wel voorstellen,
/store/TeX.iso is eigenlijk een gewoon bestand.

met punt 2 heb ik wat meer moeite mee,
ik vermoed dat vi slimme dingen doet,
op zijn minst zit er meer programmacode in vi dan ik heb uitgezocht.

> In een later bericht wel een beschrijving hoe het expriment goed
> uitgevoerd kan worden.

De meeting met /store en /store/TeX.iso' is niet zo handig gekozen.
Het ene, '/store', is een mountpoint, het ander, '/store/TeX.iso' is
een file, die of meer als "device" gebruikt wordt.

Beter is om '/store/TeX.iso' en '/TeX' te gebruiken.


Om slimme code in vi uit de weg te gaan, heb ik een "open for read"
geschreven. De source code er van is bijgesloten, compileer opdracht is
  cc -o ofr ofr.c

Spreek van een "werk terminal" en een "meet terminal",
i.p.v. telkens "andere xterm", "andere .



Expriment verzoek:

in de werk terminal

  /path/naar/ofr  /TeX/README.EN


in de meet terminal

  fuser -a /store/TeX.iso /Tex
  fuser -am /store/TeX.iso /Tex


in de werk terminal

  enter en/of return aanslaan om ofr te stoppen

  cd /TeX

in de meet terminal

  fuser -a /store/TeX.iso /Tex
  fuser -am /store/TeX.iso /Tex



Cheers
Geert Stappers

----8<---- begin ofr.c ----8<----
/* ofr.c 
 *
 * Open For Read, opens a file for read
 * then waits for ENTER
 */
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char errormsg[512] ;
static char usage[]= "\
usage: ofr <file>\n\
\n\
ofr needs 1 argument: the filename of a file to open for read\n\
\n\
Enterring RETURN exits the programm gracefull.\n\
" ;

/* Open for Read */
void ofr ( char filename[] )
{
   FILE *fd ;
   fd = fopen(filename,"r") ;
   if ( fd == NULL ) {
	sprintf(errormsg,"Could not read %s, %s\n"
		,filename
		,strerror(errno)
	);
	fprintf(stderr,errormsg);
   } ;
   getchar(); /* wait for user enterring RETURN */
   fclose(fd);
} ;

int main(int argc, char *argv[] )
{
	if (argc == 2) {
		ofr ( argv[1] );
		return (0) ;
	} else {
		fprintf(stderr,"%s\n",usage);
		return(1);
	}
}
/* last line */
----8<---- end ofr.c ----8<----



More information about the Linux mailing list