Staňte se programátorem: Jak na C# pod Linuxem II.

Microsoft .NET Framework je dnes již k dispozici i na Linuxu. Projekt se jmenuje Mono a s pomocí GTK nebo Windows Forms tak můžete v C# psát multiplatformní aplikace.

V minulém díle jste si s námi mohli vytvořit program – správce procesů, napsaný v jazyce C# pro operační systém Linux. Platforma .NET je sice nativně vytvořena pro operační systém Windows, avšak pro Linux existuje jeho klon s názvem Mono ve vývojovém prostředí MonoDevelop. Ukázali jsme si práci s ovládacími prvky knihovny GTK, na které je mimochodem založen visuální prostředí GNOME.

Na prvním projektu jsme si ukázali základní práci, dnes se k němu vrátíme, popíšeme si ale naopak kód, pomocí kterého jsme zjistili systémové proměnné a některé běžící procesy.

V dnešním díle si ukážeme:

  • Práce s procesy
  • Výpis systémových proměnných
task_manager_informace.png  taskmanager_procesy.png
Dialog s výpisem informací o systému a související spuštěné procesy

Systémové proměnné

Systémové proměnné jsou takové proměnné, ke kterým má každá aplikace přístup. Systémové proměnné většinou obsahují cesty k souborům či složkám, informace o uživateli, systému či hardwaru. V jazyce C# se k systémovým proměnným nejjednodušeji dostaneme pomocí metody GetEnvironmentVariables třídy System.Environment, která vrací instanci třídy System.Collections.IDictionary. Tato třída slouží jako slovník – obsahuje uspořádané dvojice ve tvaru klíč – hodnota (analogie k asociativnímu poli v PHP aj.). K procházení jednotlivých uspořádaných dvojic použijeme cyklus foreach. Tyto dvojice jsou představovány třídou DictionaryEntry. Ke zjištění klíče použijeme vlastnost Key. Pro zjištění hodnoty, jež náleží tomuto klíči, použijeme vlastnost Value.

IDictionary promenne = Environment.GetEnvironmentVariables();

foreach (DictionaryEntry de in promenne)
{
    // Vloží název systémové proměnné do komponenty typu ComboBoxEntry
    this.comboboxentry1.AppendText(de.Key.ToString());
}

Pro získání hodnoty určité systémové proměnné, použijeme metodu GetEnvironmentVariable třídy Environment, která jako argument očekává název proměnné, jež má být vrácena.

this.label5.Text = "Hodnota: " + 
                                              Environment.GetEnvironmentVariable(this.comboboxentry1.ActiveText);

Práce s procesy

Každý proces systému je představován třídou System.Diagnostics.Process.

Pro získání pole procesů slouží metoda GetProcesses třídy Process. Chceme-li ve Windows ukončit určitý proces (jehož jméno zjistíme vlastností ProcessName), použijeme metodu Kill.

foreach(Process p in Process.GetProcesses())
{
    // Ukončí poznámkový blok
    if (p.ProcessName == “notepad“)
    {
        p.Kill();
        break;
    }
}

Jelikož ne všechny třídy obsažené v platformě Mono jsou kompletní, metoda Kill nefunguje. K ukončení procesu tedy musíme použít jiný způsob – tím je použití statické metody kill třídy Mono.Unix.Native.Syscall. Tato metoda jako svůj argument očekává tzv. PID, což je neduplicitní číslo, pod kterým se každý proces v systému identifikován. Druhým argumentem je položka výčtového typu Mono.Unix.Native.Signum.SIGKILL představující signál, kterým bude proces ukončen.

MyTreeNode vybranaPol;

// Projde jednotlivé běžící procesy
foreach(Process p in Process.GetProcesses())
{
    // Identifikuje vybraný proces
    if (p.ProcessName == vybranaPol.NazevProcesu)
    {
        // Ukončí proces sygnálem SIGKILL
        Mono.Unix.Native.Syscall.kill(p.Id,Mono.Unix.Native.Signum.SIGKILL);
        ns.RemoveNode(vybranaPol);
        break;
    }
}

Pro spuštění procesu složí statická přetížená metoda Start třídy Process, které můžeme dosadit jeden či dva řetězce – argumenty. Chceme-li spustit proces bez parametrů, dosadíme jako argument řetězec představující cestu k aplikaci, jež má být spuštěna.

Process.Start(“firefox“);

Chceme-li spustit aplikaci s parametry, použijeme je jako druhý argument:

Process.Start(“firefox“,“google.com“);

Pro nastavení priority procesu použijeme vlastnost PriorityClass třídy Process, které přiřadíme položku výčtového typu ProcessPriorityClass představující nastavovanou úroveň priority procesu.

// Projde jednotlivé procesy
foreach(Process p in Process.GetProcesses())
{
    // Vybere proces jehož jméno je shodné s jménem
    // vybraným ve komponentě NodeView
    if (p.ProcessName == “nějaký proces“)
    {
        // Nastaví prioritu
        if (this.comboboxentry1.ActiveText == "Nečinný")
            p.PriorityClass = ProcessPriorityClass.Idle;
       
else if(this.comboboxentry1.ActiveText == "Podprůměrná")
            p.PriorityClass = ProcessPriorityClass.BelowNormal;
        else if(this.comboboxentry1.ActiveText == "Průměrná")
            p.PriorityClass = ProcessPriorityClass.Normal;
        else if(this.comboboxentry1.ActiveText == "Nadprůměrná")
            p.PriorityClass = ProcessPriorityClass.AboveNormal;
        else if(this.comboboxentry1.ActiveText == "Vysoká")
            p.PriorityClass = ProcessPriorityClass.High;
        else if(this.comboboxentry1.ActiveText == "Nejvyšší")
            p.PriorityClass = ProcessPriorityClass.RealTime;
    }
)

Multiplatformní .NET

Práce se systémovými proměnnými a procesy v .NET knihovně se napříč systémy příliš neliší, pokud tedy už máte s C# určité zkušenosti, práce na Linuxu by pro vás neměla být nikterak velikým překvapením – přestože Mono ještě není zcela funkční a kompatibilní. A platí to i o vývojovém prostředí, v každé moderní linuxové distribuci stačí z oficiálního repozitáře nainstalovat program MonoDevelop, který díky knihovně Gtk# nabízí i prostředí pro návrh vizuálních aplikací.

monodevelop_kod.png  monodevelop_ui.png
Vývojové prostředí MonoDevelop se příliš neliší od standardu Visual Studia nebo SharpDevelopu

Nakonec opět přikládáme projekt pro MonoDevelop a spustitelný program pro linuxovou platformu. Ke spuštění programu budete potřebovat běhové prostředí Mono. Program má sice příponu *.exe, z terminálu jej ale můžete spustit třeba příkazem: mono TaskManagerProgram.exe.


X

Doporučit článek

Vaše jméno:

Váš e-mail:

E-mail adresáta:

Komentář:

kontrolní kód

Odeslat


celkem 14

Poslední komentáře Komentáře

Re: Cestina v identifikatorech Mi.Chal 27. 1. 2009 21:25
Re: Co to? Michal Smrž 26. 1. 2009 16:32
Re: Cestina v identifikatorech tucekj 26. 1. 2009 11:58
Re: Cestina v identifikatorech Jaroslav Šmíd 26. 1. 2009 11:28
Re: Cestina v identifikatorech Niky 26. 1. 2009 11:17
Přidat příspěvek Zobrazit vše


Další podobné články

Windows 8 má „problém“, startuje příliš rychle

Windows 8 má „problém“, startuje příliš rychle

Rozlučte se s klávesami F2 nebo třeba F8. Windows 8 je po desítkách let už nebude používat. Zapomeňte na klasický vstup do BIOSu a zapomeňte vlastně i na samotný BIOS.

Před 5 hodinami  |  Čížek Jakub  |  6

Na stopě tajemství: Co je záhadná aplikace ve Windows 8?

Na stopě tajemství: Co je záhadná aplikace ve Windows 8?

21. 5. 2012  |  Čičák Matěj  |  12
DiffPDF: Porovnejte obsah dvou PDF mezi sebou

DiffPDF: Porovnejte obsah dvou PDF mezi sebou

Máte více verzí téhož dokumentu, které se od sebe liší jen nepatrně. Najít rozdíly pouze pomocí oka je zdlouhavé a náročné. Práci vám usnadní malý a bezplatný pomocník.

21. 5. 2012  |  Kraus Josef

Nejlepší programy na outdoorové aktivity pro Windows
TIP!

Nejlepší programy na outdoorové aktivity pro Windows

Léto se blíží, stejně tak pěkné počasí a doba venkovních aktivit. Jaké programy lze využít k plánování a vylepšování výletů, zájezdů, sportování či poznávání? Připravte se na outdoor.

20. 5. 2012  |  Kraus Josef  |  5

Velikost Javascriptu na webových stránkách dramaticky roste

Velikost Javascriptu na webových stránkách dramaticky roste

18. 5. 2012  |  Čížek Jakub  |  18
Listen N Write: Rychlý přepis přednášek či rozhovorů

Listen N Write: Rychlý přepis přednášek či rozhovorů

Nahráli jste si do zvukového formátu přednášku ve škole, interview s důležitou osobou či vlastní poznatky a komentáře? Přepisování do textové podoby může být zdlouhavé. Usnadněte si to!

18. 5. 2012  |  Kraus Josef  |  2

Stallman: Nikomu neříkejte, že bude Steam pro Linux

Stallman: Nikomu neříkejte, že bude Steam pro Linux

17. 5. 2012  |  Čížek Jakub  |  21

DEJTE NÁM TIP NA ČLÁNEK