Haskell - Unix Sistem Çağrıları (Unix System Calls)

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
zulme karşı mukavemet!
Süper Üye
Katılım
7 Ocak 2016
Mesajlar
1,357
Çözümler
20
Tepki puanı
386
Ödüller
11
10 HİZMET YILI
[font='Titillium Web', sans-serif]Haskell programlama dilinde yazılmış bu fonksiyonda unix sistem çağrılarını (Unix System Calls) yapabilen bir uygulama yapılmıştır. Unix'te varolan ls fonksiyonunu,cp fonksiyonunu, cat fonksiyonunu, mv fonksiyonunu, rm fonksiyonunu, wc fonksiyonunu, cd fonksiyonunu gerçekleyen tam bir program yazılmıştır.

Ör Komutlar:
[/FONT]


Kod:
ls

$ > ls C:

$ > cp dene.hs C:\\celal.txt

$ > cat dene.hs

$>mv C:\\celal.txt D:\\celal.txt

$>rm  D:\\dene

$>wc D:\\dene.hs

$>cd C:

Program Kodu :


import System.IO
import System.Directory

unixcall =
          getContents >>= \ satirlar ->
          calistir (lines satirlar)
         
calistir (b:bs) =
                 fonk ([a |a <-words b]) >>
                 putStr "$>" >>
                 calistir bs

fonk (l:[])
           | l=="ls"   = getCurrentDirectory >>= \dir ->
              dirlist dir

fonk (l:ls)
            | l=="ls"    = dirlist (head ls)
            | l=="cp"    = kopyala (head ls) (head (tail ls))
            | l=="cat"   = icerikgoster (head ls)
            | l=="mv"    = dosyagit(head ls) (head (tail ls))
            | l=="rm"    = klasorsil(head ls)
            | l=="wc"    = karaktersay (head ls)
            | l=="cd"    = dizinsec (head ls)


            
dirlist a =
          getCurrentDirectory >>= \dir  ->
          getDirectoryContents a >>= \filelist ->
          setCurrentDirectory a >>
          dosyalariekranayazdir filelist >>
          setCurrentDirectory dir >>
          return ()
                   
dosyalariekranayazdir (l:[]) = putStrLn l
dosyalariekranayazdir (l:ls) =
                              putStrLn l >>
                              dosyalariekranayazdir ls


kopyala a b =
            openFile a ReadMode >>= \acilacak ->
            openFile b WriteMode >>= \yazilacak ->
            hGetContents acilacak >>= \icerik ->
            hPutStr yazilacak icerik >>
            hClose acilacak >>
            hClose yazilacak

icerikgoster a=
              openFile a ReadMode >>= \acilacak ->
              hGetContents acilacak >>= \icerik ->
              putStr icerik

dosyagit a b=
             openFile a ReadMode >>= \acilacak ->
             openFile b WriteMode >>= \yazilacak ->
             hGetContents acilacak >>= \icerik ->
             hPutStr yazilacak icerik >>
             removeFile a
            
klasorsil a= removeDirectory a

karaktersay a=
              openFile a ReadMode >>= \acilacak ->
              hGetContents acilacak >>= \icerik ->
              putStrLn ("Karakter Sayisi: "++(show(length icerik))) >>
              putStrLn ("Kelime Sayisi: "++(show(length(words icerik)))) >>
              putStrLn ("Satir Sayisi: "++(show(length(lines icerik))))
          
             
 dizinsec a=  setCurrentDirectory a
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst