basit bir unix-linux shell implementasyonu yapımı üzerine

Başlatan MrWii, 05 Ocak 2011 - 01:56:38

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

MrWii

Merhaba.

Öncelikle ilk mesajımın böyle bir sebepten olmasına çok üzgün olduğumu belirtmeliyim, buradan çok şey öğrenecekmişim gibi geliyor, ve aranıza katıldığıma gerçekten memnunum.
Maruzatım şu. Piping ve redirection'ı implemente etmeden,  /bin directory'de ls gibi tüm command'ları execute edebilen,  ls -al, uname -r or ps -u root -al command'larını kabul eden, process yaratabilen ve run edebilen, ve en sonunda exit command'ını uygulayabilen bir shell yazmam gerekiyor. 
Açıkçası sizin forumlarınız dahil saatlerdir tonlarca şey okuyorum, hala background bilgim yüzeysel seviyede. Gelgelelim ödevi veren bölümde konuyla alakalı teoride ve pratikte hiç bir şey yapmamış olduğumuzdan, kocaman bir soru işareti olarak duruyor bu.
Örnek olarak verilen kod şu şekilde:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

/* Spawn is a child process running a new program */
int spawn (char* program, char** arg_list)
{
pid_t child_pid;

/* Duplicate the process */
child_pid = fork();
if(child_pid != 0){
/* This is the parent process */
return child_pid;
}else{
/* now execute a new program which is in the path */
execvp(program, arg_list);
/*execvp only returns if an error occurs */
fprintf(stderr, "an error occured in execvp");
abort();
}
}

int main()
{
/* The argument list to pass */
int child_status;
char* arg_list[] = {
"ls", /* argv[0] the name of the program */
"-l",
"/",
"> /dev/null",
NULL /* don't forget the null! */
};
/* wait for child process to complete */
spawn("ls > /dev/null", arg_list);

wait(&child_status);
if(WIFEXITED(child_status)){
printf("the child process exited normally, with exit code %d\n",WEXITSTATUS(child_status));
}else{
printf("the child prpocess exited abnormally\n");
}

return 0;
}


Bu library'lerin <sys/types.h> <unistd.h>  <sys/wait.h> olanlarını visual studio bulamadı, anladığım kadarıyla linux'la ilgililer. Ubuntu'yu indirmeye başladım ben de, napacağımı bilmiyorum. Win7 64 bit işletim sistemi kullanıyorum. C ve C++ ile aram iyi ama linux'la ve unix'le hiç uğraşmadım (akademik anlamda da bu güne kadar uğraşmam gerekmedi pratik olarak). Kaybolmuş durumdayım, fikir verebilecek olan var mı? İlla linux kurmam mı gerekiyor?

heartsmagic

Programlamadan anlamadığım için o konuda yorum yapamam ancak son soru için yorum yapmam mümkün. Hani belki Windows tarafı için muadil kütüphaneler bulunabilir, fakat hedeflenen uygulama salt Linux üzerine olduğu için ister istemez Linux kurman, denemen gerekecektir.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

Öncelikle hoş geldiniz... Şunu belirtmek isterim yalnız konuya girmeden önce; çoğu terim olsa bile bir yerden sonra idrak konusunda güçlük yaratabiliyor İngilizce kelimeler...

Benim asıl merak ettiğim ise şu; madem yaratılan sürecin (child process)  sonlanması beklenecek, o zaman neden yeni süreç oluşturuluyor... Burası garibime gitti...


Dahil ettiğiniz başlık dosyalarını Windows altında bulamamanız normal, bunlar Linux sistem fonksiyonlarını barındıran başlık dosyalarıdır..

http://forum.ubuntu-tr.net/index.php/topic,21683.0.html

Bu başlıkta bir kaçından üstün körü bahsetmiştik bu dosyalardan... fork işleminin Windows altında tam olarak karşılığı var mıdır bilmiyorum fakat multithread fonksiyonları  standartlaştırıldı diye biliyorum.. Yani Windows tarafında da işinize yarayabilir...


Böyle bir program için önerim; öncelikle fork() ve exec() fonksiyonlarını araştırın derim... C ve C++ dillerine hakimseniz tek araştırmanız gereken bu ikisi.. exec() fonsiyonunun varyasyonları mevcut, sizin programınızdaki execvp gibi...

Ödevi veren hocaya sorup system(); fonksiyonuna izin var mı onu da sorabilirsiniz =) Eğer varsa çok daha basit bir hal alacaktır olay =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

MrWii

Şu anda özellikle IDE konusunda (yani Windows'taki Visual Studio gibi) sıkıntı çekiyorum. Nasıl kuracağım, nereden kuracağım? Çünkü sonuçta text editor bir yer yok koda bakabileceğim, zaten asıl mesele kodu "debug" edebilmekte, yani sırf bu yüzden bir IDE'ye ihtiyacım var Microsoft Visual Studio gibi. Var mıdır bilgisi olan nereden kurabilirim?

heartsmagic

Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.