meta données pour cette page
  •  

Approche des aspects systèmes (Ruby)

  • Executer une commande externe
proc = `ps aux`
  • Obtenir le code de retour de la commande exécutée :
puts $?
puts $?.exitstatus = 0
  • Descripteur de fichier

Sans parler de droits, chaque fichiers n'est pas toujours lisible par tous. Il existe trois type d’accès :

f = File.new("fichier.txt")
 
# Lecture d'un fichier à accès exclusif
f.flock(File::LOCK_EX)
 
# Lecture d'un fichier à accès partagé
#f.flock(File::LOCK_SH)
 
#...
 
# On libère le vérrou :
f.flock(File::LOCK_UN)
 
f.close
  • Informations sur les fichiers

De la classe File::Stat on peut obtenir :

  1. stat : respecte des liens symbolique et donne des informations sur le fichier cible.
  2. lstat : ne suit par les liens symboliques et donne des informations sur le lien.
puts File.stat(”gros_fichier.txt).size
  • Les signals

Il est possible de changer le comportement d'un programme dès qu'il reçoit un signal par exemple.

signal.trap(3) { puts "J'ai reçu le signal SIGQUIT" }

Lors qu'il s'agit d'en envoyer :

pid = fork do
   Signal.trap("HUP") { puts "Ouch!"; exit }
end
 
Process.kill("HUP", pid)
Process.wait
  • Déployer un processus fils du père
fork do 
   puts "fils #{Process.pid}"
end
puts "Père #{Process.pid}"
 
# On attend la fin d'un processus avec :
Process.wait
  • Ce qui ne faut pas faire!
#!/usr/bin/ruby -w
 
1.upto(4) do |i|
  if fork != nil
    puts ”pid = #{Process.pid}, ppid = #{Process.ppid}, i = #{i}”
  end
end