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


Webmaster Genel   

Yazar: ByClxon    0 Yorum    219 Görüntüleme
  • Derecelendirme: 0/5 - 0 oy

Paylaşım Tarihi: 13.05.2016, 21:01:32 #1
ByClxon SEA !
Efsane Üye
Status: Çevrimdışı Yorumları:1,010 Konuları:442 Kayıt Tarihi:07.01.2016 Rep Puanı: 667

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:


Kod:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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


Kullanıcı İmzası
#fenerbahçeA.A.K.
Resim http://i.hizliresim.com/nErB8V.png
İletişim İçin Facebook;

Sitemize kayıtlı değilseniz linkleri görebilmeniz İçin Kayıt Olun veya Giriş Yapın


Öfkemiz sarsın her yanı, bozkurtlar yürüye yürüye
Dökülsün düşmanın kanı, yaşasın ırkçı TÜRKİYE!

Taşında gözü olanın yurduna MEZAR kazacağız
Hainin, soysuzun, döneğin alnına VATAN yaazcağız
Hainin, soysuzun alnına YAŞASIN TURAN yazacağız!



Resim http://i.hizliresim.com/LQgldG.png






 

         











Aradığınızı Bulamadınız Mı ?

Konuyu Okuyanlar:
1 Ziyaretçi