Unix programlama ile OCaml'a alışmak için küçük yardımcı programlar yazmaya çalışıyorum. İşte cat
benim deneyin bulunuyor:OCaml'de kedi yazma: Unix.read'in kullanımı
open Unix ;;
let buffer_size = 10
let buffer = String.create buffer_size
let rec cat = function
| [] ->()
| x :: xs ->
let descr = openfile x [O_RDONLY] 0 in
let rec loop() =
match read descr buffer 0 buffer_size with
| 0 ->()
| _ -> print_string buffer; loop() in
loop();
print_newline();
close descr;
cat xs ;;
handle_unix_error cat (List.tl (Array.to_list Sys.argv))
Sorun okumak için başka bir şey, tampon önceden içerdiği şeyin sonu var çünkü read
son çağrı, tampon tamamen doldurmaz, olması gibi görünüyor da basılır. Ben read
kullanarak birkaç örnek kodları okudum ve arabellek her doldurduktan sonra String.create
kullanmadılar (ki, yine de, bazı karakterler ile doldurur ...); Peki ne yapmalıyım? Teşekkürler.
Bu Unix modülü hakkında konuşan "Objective Caml ile Unix sistem programlaması" okuyorum. Bundan gerçekten kaçmalı mıyım? – rochem
@rochem Bu, hedeflerinize bağlıdır. Bu kurs size Unix bilgisi verecek ve diğer dillere aktarılabilecektir (bir arabellek ve arabellek büyüklüğünden geçerek, okunan karakterlerin sayısını elde etme C'deki tipik yoldur). Bu çağrılar C çağrıları ile çok yakından eşleştiğinden, her zamanki gibi Caml programlamada neredeyse hiç kullanılmazlar, bu nedenle bu dersin size öğretmeyeceği şey, deyimsel OCaml programlarının nasıl yazılacağıdır. –