UNIX/Linux Sistemlerinde exec İşlemleri

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "UNIX/Linux Sistemlerinde exec İşlemleri"

Transkript

1 UNIX/Linux Sistemlerinde exec İşlemleri Kaan Aslan 10 Temmuz 2008 UNIX/Linux sistemlerinde fork fonksiyonu prosesin yeni ve özdeş bir kopyasını oluşturmaktadır. Yani fork işlemi sonrasında alt ve üst prosesler aynı program kodunu (muhtemelen onların farklı kısımlarını) çalıştırıyor durumda olurlar. Halbuki pek çok uygulamada programcı yaratmış olduğu alt prosesin farklı bir program kodunu çalıştırmasını ister. İşte exec fonksiyonları prosesin başka bir program olarak çalışmaya devam etmesini sağlamaktadır. exec işlemleri sonrasında prosesin id değeri ve kontrol bloğu değişmez. Prosesin kod, data ve bss alanları çalıştırılabilen (executable) dosyadan alınarak yüklenir. Proses artık yaşamını başka bir program olarak sürdürür. exec işlemi yapan altı farklı fonksiyon vardır. Bu fonksiyonların hepsinin isimleri exec ile başladığından bunlara kısaca exec fonksiyonları diyeceğiz. Tüm exec fonksiyonlarının prototipleri <unistd.h> dosyası içersindedir. Aşağıda bu fonksiyonların prototiplerini göreceksiniz. Bu prototiplerdeki yorum satırları kafanızı karıştırmasın. Bunları yalnızca değişken sayıda argümanlar hakkında ipucu vermek amacıyla yerleştirdik: int execl( const char *path, const char *arg0,... /*,(char *) 0 */ int execv( const char *path, char *const argv[] int execle( const char *path, const char *arg0,... /*, (char *) 0, char *const envp[] */ int execve( const char *path, char *const argv[], char *const envp[] 1

2 int execlp( const char * file, const char *arg0,... /*, (char *) 0 */ int execvp( const char *file, char *const argv[] Fonksiyonların parametrik benzerlikleri dikkatinizi çekmiştir. exec fonksiyonlarının l li (execl, execle, execlp) ve v li (execv, execve, execvp) biçimleri vardır. Bunların l li biçimleri komut satırı argümanlarını bir liste olarak, v li biçimleri ise bir dizi olarak alırlar. Ayrıca bazı exec fonksiyon isimlerinin e ya da p harfiyle sonlandırıldığını göreceksiniz. Fonksiyonların e li biçimleri çevre değişkenlerini (environment variables) de programcıdan istemektedir. p li biçimler çalıştırılabilen dosyanın yerinin belirlenmesinde PATH çevre değişkenlerini dikkate alırlar. exec fonksiyonlarıyla bir programın çalıştırılabilmesi için fonksiyonu çağıran prosesin, yol ifadesindeki tüm dizinler için ve çalıştırılabilen dosyanın kendisi için x hakkına sahip olması gerekir. Fakat exec işlemleri için ilgili prosesin çalıştırılabilen dosyanın kendisi için ya da yol ifadesindeki dizinler için r hakkına sahip olması gerekmemektedir. Dosyalar için (dizinler için değil) x hakkı kontrolünün yalnızca exec fonksiyonları tarafından yapıldığını vurgulayalım. exec fonksiyonları çalışmakta olan programın bellek alanını boşaltırlar, sonra çalıştırılmak istenen program dosyasını prosesin bellek alanına yükleyerek ilgili programı çalıştırırlar. exec fonksiyonları başarı durumunda yeni bir program kodunun çalışmasını sağladıkları için zaten geri dönmezler. Bu fonksiyonlar başarısızlık durumunda pek çok POSIX fonksiyonunda olduğu gibi -1 değerine geri dönmektedir. exec fonksiyonlarının başarısızlık durumunda errno değişkenine yerleştirdikleri önemli değerler şunlardır: E2BIG EACCESS EINVAL ENOENT ENOEXEC ENOMEM : Komut satırı argümanları ya da çevre değişkenleri izin verilen miktardan fazladır. : Prosesin birinci parametrede belirtilen yol bileşenine ilişkin dizinlerden en az birine ya da çalıştırılabilen dosyanın kendisine x hakkı yoktur ya da dosya çalıştırılabilir özellikte değildir. : Dosya çalıştırılabilir bir formata sahiptir fakat ilgili sistem tarafından desteklenmemektedir. : Fonksiyonun birinci parametresine ilişkin yol ifadesinde belirtilen bir dizin yoktur ya da bu yol ifadesine ilişkin bir yol bileşeni bir dizin girişi belirtmemektedir ya da bu yol ifadesi boş bir string ten oluşmaktadır. : Prosesin dosyaya erişim hakları yeterlidir fakat dosyanın formatı belirlenememiştir. : Programın çalıştırılabilmesi için gerekli olan bellek yetersizdir. : 2

3 exec fonksiyonlarının nasıl çalıştığını daha iyi anlayabilmek için onları ikişerli gruplayarak ele alacağız. execl ve execv Fonksiyonları execl fonksiyonu komut satırı argümanlarını bir liste olarak, execv ise bir dizi olarak almaktadır. Önce execl üzerinde duralım. execl fonksiyonunun prototipini yeniden inceleyiniz: int execl( const char *path, const char *arg0,... Fonksiyonun birinci parametresi çalıştırılabilen dosyanın yol ifadesini belirtmektedir. Yol ifadesi mutlak ya da göreli biçimde girilebilir. Fonksiyonun diğer parametreleri çalıştırılacak programın komut satırı argümanlarını belirtmektedir. Komut satırı argümanları NULL adres ile sonlandırılmış bir dizilim biçiminde girilmelidir. Prototipin sonundaki (ellipsis) atomunun C ve C++ ta değişken sayıda argüman belirlemesi için kullanıldığını biliyor olmalısınız. Şimdi execl fonksiyonunun kullanımına bir örnek verelim: /* exectest1.c */ #include <stdlib.h> int main(void) if (execl("/bin/ls", "ls", "-l", (char *) 0) < 0) perror("execl" printf("tamam\n" Derleme işlemini şöyle yapabilirsiniz: gcc o exectest1 exectest1.c general.c Buradaki programda exectest1 isimli proses çalışmasına ls programının kodlarıyla devam etmektedir. execl başarılı olduğunda geri dönmez. Dolayısıyla yukarıdaki örnekte ekrana Tamam yazısı çıkmayacaktır. Çalışmakta olan programın tüm bellek alanının boşaltılıp exec fonksiyonlarında belirtilen program dosyasının yükleneceğine dikkat ediniz. 3

4 execl fonksiyonundaki komut satırı argüman listesinin sonlandırılması hakkında bir nokta üzerinde durmak istiyoruz. Yukarıda komut satırı argümanlarının NULL adresle sonlandırılması gerektiğini belirtmiştik. Bildiğiniz gibi C de ve C++ ta sıfır değerini veren tamsayı türlerine ilişkin sabit ifadeleri NULL adres sabiti olarak kullanılabilmektedir. (Örneğin, 0, 3 3, 10L 10L gibi). Yine C de (fakat C++ ta değil) sıfır değerini veren sabit ifadesinin void * türüne dönüştürülmüş hali de (yani (void *) 0 ifadesi) NULL adres sabiti olarak ele alınmaktadır. Fakat değişken sayıda argüman olan fonksiyonlarda girilen sıfır değerleri NULL adres sabiti olarak değil, tamsayı türlerine ilişkin sıfır değeri olarak ele alınırlar. İşte bu nedenle yukarıdaki örnekte 0 değerini char * türüne dönüştürmek zorunda kaldık. execl fonksiyonunun aşağıdaki gibi çağrılması hataya yol açma potansiyeli içermektedir: execl("/bin/ls", "/bin/ls", "-l", 0 Burada artık 0 değeri int türden 0 olarak yığına aktarılır. Bunun ise iki sakıncası söz konusu olabilir: 1. NULL adres sabiti bellekte sıfır numaralı adresi belirtmek zorunda değildir. Dolayısıyla burada aktarılan argüman NULL adres sabiti anlamına gelmeyebilir. (Tabi yaygın derleyicilerin hemen hepsinde NULL adres sabitinin sayısal değeri 0 olarak alındığı için bu sorun olumsuz bir etkiye sahip olmayacaktır.) 2. Adres türleriyle int türünün aynı uzunlukta olması zorunlu değildir. Örneğin 64 bit sistemlerin çoğunda int türü 4 byte bit iken adres türleri 8 byte uzunluğundadır. Bizim girdiğimiz int türden 0 değeri yığından çekildiğinde rastgele bir adres değeri haline gelebilecektir. C ve C++ standartlarında eğer argc değeri sıfırdan büyükse programın ilk komut satırı argümanının (yani argv[0] ın) program ismini göstereceği belirtilmiştir. Fakat ilgili standartlarda program isminin ifade biçimi hakkında bir belirlemede bulunulmamıştır. Örneğin program ismi yol ifadesi içerebilir ya da içermeyebilir. Tabi C ve C++ standartları bunları söylüyor olsa da UNIX/Linux sistemlerinde biz exec işlemlerini uygularken programın ilk komut satırı argümanını program ismi biçiminde girmek zorunda değiliz. Fakat genel beklenti bu yönde olduğu için program isminin ilk komut satırı argümanı olarak geçirilmesi iyi bir tekniktir. Dikkat ederseniz biz de yukarıdaki örnekte ls programını çalıştırırken ilk argümanı /bin/ls biçiminde program ismini belirtecek biçimde oluşturduk. [1] execv fonksiyonu execl fonksiyonunun komut satırı argümanlarını bir dizi olarak alan biçimidir. Prototipini inceleyiniz: int execv(const char *path, char *const argv[] Fonksiyonun birinci parametresi çalıştırılabilen dosyanın yol ifadesini, ikinci parametresi komut satırı argümanlarının yerleştirileceği dizinin başlangıç adresini alır. Yani komut satırı argümanlarına ilişkin yazıların adresleri bir gösterici dizisine yerleştirilmeli ve bu dizinin adresi fonksiyona argüman olarak geçilmelidir. Komut satırı argümanlarının yerleştirileceği dizinin son elemanında NULL adres olmalıdır. [2] 4

5 Aşağıdaki örnek execv fonksiyonunun parametrik yapısını daha iyi anlamanıza yardımcı olacaktır: /* exectest2.c */ #include <stdlib.h> int main(void) char *args[] = "/bin/ls", "-l", NULL; if (execv("/bin/ls", args) < 0) perror("execv" printf("tamam\n" Şimdi de aşağıdaki örneği inceleyiniz: /* exectest3.c */ #include <stdlib.h> int main(int argc, char *argv[]) if (argc == 1) fprintf(stderr, "Yanlis sayida arguman!..\n" if (execv(argv[1], &argv[1]) < 0) perror("execv" Bu program komut satırından alınan dosya ismini execvp fonksiyonuyla çalıştırıyor. argv dizisinin son elemanının NULL adres olduğunu anımsayınız. Programı şöyle derleyebilirsiniz: gcc o exectest3 exectest3.c general.c Programı şöyle çalıştırdığımızı düşünelim: 5

6 Burada /bin/ls programı çalıştırılmış ve /bin/ls ile l komut satırı argümanları olarak geçirilmiştir. execlp ve execvp Fonksiyonları execlp fonksiyonu execl fonksiyonunun PATH çevre değişkenini dikkate alan biçimidir. Fonksiyon execl ile aynı parametrik yapıya sahiptir. int execlp( const char *file, const char *arg0,... execlp fonksiyonunun birinci parametresiyle belirtilen yol ifadesi / karakteri içermiyorsa burada belirtilen dosya ismi execlp fonksiyonunu uygulayan prosesin PATH çevre değişkeninde belirtilen dizinlerde sırasıyla aranır. Örneğin execlp fonksiyonu şöyle uygulanmış olsun: if (execlp("ls", "ls", "-ls", (char *) 0) < 0) perror("execlp" Prosesin PATH çevre değişkeninin aşağıdaki gibi olduğunu varsayalım: PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11 PATH çevre değişkeni : karakterleriyle ayrıştırılmış alanlardan oluşmaktadır. Bu alanlarda dizinlerin yol ifadeleri bulunur. exec fonksiyonlarının p li biçimleri PATH çevre değişkenindeki bu alanları sırasıyla gözden geçirirler. Bu örneğimizde ls program dosyası önce /usr/local/bin dizini içerisinde, sonra /usr/bin dizini içerisinde aranacak ve arama işlemi böyle sürdürülecektir. Bu aramalar sırasında dosya bulunursa arama devam etmeyecektir. (ls program dosyasının /bin dizininde bulunduğunu anımsayınız.) Burada önemli olan bir noktaya dikkatinizi çekmek istiyoruz. exec fonksiyonlarının p li biçimleri prosesin çalışma dizinine hiç bakmamaktadır. Yani PATH çevre değişkeninin yukarıdaki gibi bir içeriğe sahip olduğu durumda biz çalışma dizinindeki bir programı exec fonksiyonlarının p li biçimleriyle çalıştıramayız. Fakat PATH çevre değişkeninde. ifadesi ile prosesin çalışma dizini için de yol belirtilebilir. Örneğin: PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:. Burada execlp fonksiyonu eğer program dosyasını diğer dizinlerde bulamazsa prosesin çalışma dizinine de bakacaktır. exec fonksiyonlarının p li biçimlerinde belirtilen program dosyasına ilişkin yol ifadesi herhangi bir yerinde / karakteri içeriyorsa bu durumda PATH çevre değişkenine 6

7 bakılmaz. Bu durumda yol ifadesi mutlaksa kök dizinden, göreliyse prosesin çalışma dizininden itibaren yer belirtir. Örneğin: if (execlp("project/sample", "project/samples", (char *) 0) < 0) perror("execlp" Burada PATH çevre değişkenine hiç bakılmayacaktır. sample isimli program dosyası prosesin çalışma dizininin altındaki project dizininin altında aranacaktır. execvp fonksiyonu execlp fonksiyonunun komut satırı argümanlarını bir dizi ile biçiminde alan biçimidir. Prototipini yeniden inceleyiniz: int execvp( const char *file, char *const argv[] Fonksiyonun birinci parametresi program dosyasını ikinci parametresi komut satırı argümanlarını belirtmektedir. Komut satırı argümanlarının veriliş biçimi dışında fonksiyonun execlp fonksiyonundan herhangi bir çalışma farklılığı farkı yoktur. Fonksiyonu aşağıdaki örnek kodla test edebilirsiniz: /* exectest4.c */ #include <stdlib.h> int main(void) char *args[] = "ls", "-l", NULL; if (execvp("ls", args) < 0) perror("execvp" Kabuk üzerinde biz bir programı çalıştırmak istediğimizde kabuk bu programı exec fonksiyonlarının p li biçimleriyle çalıştırmaktadır. Bu nedenle biz kabuk üzerinden bulunduğumuz dizindeki bir programı doğrudan çalıştıramayız. Çünkü exec fonksiyonlarının p li biçimleri -eğer PATH çevre değişkeninde yoksa- dosyayı prosesin çalışma dizininde aramamaktadır. Örneğin bash kabuğu üzerinde bulunduğumuz dizindeki sample isimli bir programı şöyle çalıştırmaya çalışalım: 7

8 Gördüğünüz gibi bash kabuğu sample isimli programı ya da komutu bulamadığını söylüyor. Halbuki exec fonksiyonlarının p li biçimleri eğer dosyaya ilişkin yol ifadesinde / karakteri varsa artık PATH çevre değişkenine bakmamaktadır. Dolayısıyla biz böylesi bir durumda bulunduğumuz dizindeki programı kabuk içerisinden şöyle çalıştırabiliriz: execle ve execve Fonksiyonları exec fonksiyonlarının e li biçimleri bize yeni bir programı çalıştırırken prosesin çevre değişkenlerini de tamamen değiştirme olanağını vermektedir. execlp ve execve fonksiyonlarının prototiplerini bir kez daha inceleyiniz: int execle( const char *path, const char *arg0,... /*, (char *) 0, char *const envp[] */ int execve( const char *path, char *const argv[], char *const envp[] Her iki fonksiyon da çevre değişkenlerini bir gösterici dizisi olarak almaktadır. Gösterici dizisinin her elemanı Değişken=Değer biçiminde bir yazıyı gösterir. Gösterici dizisinin NULL adresle sonlandırılması gerekir. execle fonksiyonu komut satırı argümanlarını liste biçiminde execve ise dizi biçiminde almaktadır. Şimdi bu fonksiyonların kullanımına ilişkin bir örnek verelim: /* dispenv. c*/ extern char **environ; int main(void) int i; for (i = 0; environ[i]!= NULL; ++i) puts(environ[i] 8

9 /*exectest5.c */ #include <stdlib.h> int main(void) char *args[] = "dispenv", NULL; char *env[] = "name=kaan Aslan", "no=100", NULL; if (execve("dispenv", args, env) < 0) perror("execve" /*exectest6.c */ #include <stdlib.h> int main(void) char *env[] = "name=kaan Aslan", "no=100", NULL; if (execle("dispenv", "dispenv", (char *) 0, env) < 0) perror("execle" Burada üç iki ayrı program var. Üçünü de de ayrı ayrı derlemelisiniz: gcc o dispenv dispenv.c gcc o exectest5 exectest5.c general.c gcc o exectest6 exectest6.c general.c exectest5 programı execve fonksiyonunu, exectest6 programı execle fonksiyonunu kullanarak dispenv programını çalıştırıyor. dispenv programı ise prosesin tüm çevre değişkenlerini yazdırıyor. Pek çok UNIX türevi sistemde tüm exec fonksiyonları değil yalnızca execve fonksiyonu bir sistem fonksiyonu olarak yazılmıştır. Geri kalan exec fonksiyonları normal kütüphane fonksiyonları biçiminde gerçekleştirilmiştir. Bu sistemlerde biz bir exec fonksiyonunu çağırdığımızda fonksiyon kendi içerisinde execve için gereken parametreleri oluşturur ve execve fonksiyonunu çağırır. Yani aslında bu sistemlerde PATH çevre değişkenlerine de sistem fonksiyonları değil, kullanıcı modundaki 9

10 kütüphane fonksiyonları bakmaktadır. exec fonksiyonları için parametre düzenlemesi şöyle yapılmaktadır: execl: Komut satırı argümanlarını bir gösterici dizisine yerleştirir. Bu diziyi ve prosesin üst prosesten aldığı çevre değişkenlerini temsil eden environ dizisini argüman yaparak execve fonksiyonunu çağırır. execlp: Dosyanın yol ifadesinde / karakteri kullanılmamışsa PATH çevre değişkenindeki her bir dizine sırasıyla bakarak belirtilen program dosyasını o dizinlerde arar, eğer dosyayı bulursa komut satırı argümanlarını bir gösterici dizisine yerleştirir, bu diziyi ve prosesin üst prosesten almış olduğu çevre değişkenlerini temsil eden environ dizisini argüman yaparak execve fonksiyonunu çağırır. execv: Prosesin üst prosesten almış olduğu çevre değişkenlerini temsil eden environ dizisini de argüman yaparak execve fonksiyonunu çağırır. execvp: Eğer dosyanın yol ifadesinde / karakteri kullanılmamışsa PATH çevre değişkenindeki her bir dizine sırasıyla bakarak belirtilen program dosyasını o dizinlerde arar; eğer dosyayı bulursa komut satırı argümanlarıyla birlikte prosesin üst prosesten almış olduğu çevre değişkenlerini temsil eden environ dizisini de argüman yaparak execve fonksiyonunu çağırır. execle: Komut satırı argümanlarını bir gösterici dizisine yerleştirir. Bu diziyi ve yine parametre yoluyla aldığı çevre değişken dizisini argüman yaparak execve fonksiyonunu çağırır. exec fonksiyonlarının execve sistem fonksiyonunu nasıl çağırdıklarını aşağıdaki şekille de özetleyebiliriz: [3] Son olarak da kütüphane fonksiyonlarının execve fonksiyonunu nasıl çağırdığını gerçek kaynak kodlar üzerinden açıklayalım. Aşağıda glibc (version ) kütüphanesindeki execl fonksiyonunun kaynak kodlarını görüyorsunuz: 10

11 int execl (const char *path, const char *arg,...) #define INITIAL_ARGV_MAX 1024 size_t argv_max = INITIAL_ARGV_MAX; const char *initial_argv[initial_argv_max]; const char **argv = initial_argv; va_list args; argv[0] = arg; va_start(args, arg unsigned int i = 0; while (argv[i++]!= NULL) if (i == argv_max) argv_max *= 2; const char **nptr = realloc(argv == initial_argv? NULL : argv, argv_max * sizeof(const char *) if (nptr == NULL) if (argv!= initial_argv) free(argv return -1; if (argv == initial_argv) memcpy(nptr, argv, i * sizeof (const char *) argv = nptr; argv[i] = va_arg(args, const char * va_end(args int ret = execve(path, (char *const *) argv, environ if (argv!= initial_argv) free (argv return ret; Burada komut satırı argümanları için başlangıçta 1024 elemanlık bir yer ayrılmıştır. Eğer komut satırı argümanları bu değerden fazlaysa realloc fonksiyonu ile dizi büyütülmektedir. Değişken sayıda argümanlarının döngü içerisinde va_arg makrosuyla elde edildiğini görüyorsunuz. Fonksiyonun en sonunda execve fonksiyonunun çağrıldığına dikkat ediniz. execve doğrudan inline sembolik makina dili koduyla execve sistem fonksiyonunu çağırmaktadır. environ global değişkeni environ değişkeninin kütüphane içerisindeki ismidir. exec fonksiyonları ile bir programı çalıştırdığımızda kendi programımızın sonlandırıldığını ve prosesin yaşamına başka bir program olarak devam ettiğini gördük. Fakat uygulamada çoğu kez programcılar hem kendi programının devam etmesini hem de yeni bir programın çalıştırılmasını isterler. İşte bu nedenle exec fonksiyonları genellikle tek başına değil fork fonksiyonuyla birlikte kullanılmaktadır. Tipik olarak programcı önce bir kez fork yaparak yeni bir proses yaratır, alt proses akışında da exec fonksiyonlarından birini uygulayarak alt prosesin prosesin başka bir programı çalıştırmasını sağlar. Örneğin: 11

12 pid_t pid; int status;... if ((pid = fork()) < 0) perror("fork" if (pid == 0) if (execl("sample", "sample", (char *) 0) < 0) perror("fork" _ /* Üst proses çalışmasına devam ediyor... */ if (waitpid(pid, &status, 0) < 0) perror("waitpidfork" exit(failure Örneğimizde alt proseste execl uygulandığını görüyorsunuz. Eğer alt proseste uygulanan exec işlemi başarısızsa alt proses sonlandırılmıştır. Sonlandırmanın _exit fonksiyonuyla yapılmış olmasına takılmayınız. Eğer <stdio> fonksiyonlarına ilişkin bir tampon aktarım sorunu yoksa sonlandırmanın _exit ya da exit fonksiyonu ile yapılmasının da bir önemi yoktur. Örneğimizin sonunda alt prosesin yine wait fonksiyonlarıyla beklendiğine dikkat ediniz. Böylece alt proses sonlandığında hortlak olmaktan kurtarılmıştır. Aşağıda fork ve exec işlemlerinin birlikte uygulandığı basit bir örnek görüyorsunuz: /*exectest7.c */ #include <stdlib.h> #include <sys/wait.h> void err_sys(const char *msg) perror(msg fflush(stdout 12

13 int main(int argc, char *argv[]) pid_t pid; int status; if (argc!= 2) err_usr("yanlis sayida arguman girildi!\n" if ((pid = fork()) < 0) err_sys("fork" if (pid == 0 && execl(argv[1], argv[1], (char *) 0) < 0) err_sys("execl" if (waitpid(pid, &status, 0) < 0) err_sys("waitpid" if (WIFEXITED(status)) printf("\nprossin cikis kodu: %d\n", WEXITSTATUS(status) Program komut satırı ile aldığı programı çalıştırıyor, alt prosesin çalışması bittiğinde onun çıkış kodunu alarak ekrana yazdırıyor. Programı şöyle derleyebilirsiniz: gcc o exectest7 exectest7.c Aşağıdaki gibi çalıştırabilirisniz:./exectest7 /bin/ls Şimdi de exec işlemleri sonrasında alt prosesin dosya betimleyici tablosunun durumu üzerinde durmak istiyoruz. fork işlemi sonrasında prosesin betimleyici tablosunun alt prosese kopyalandığını anımsayınız. Burada küçük bir pürüz söz konusu olabilmektedir. Biz exec fonksiyonlarıyla tamamen farklı bir programı çalıştırdığımızda artık daha önce açık olan dosyaların yeni program için bir anlamı kalacak mıdır? Yeni program zaten kendi açtığı dosyalar için yeni betimleyiciler elde edecek ve bunları kullanacaktır. Üst prosesten gelen betimleyicilerle genellikle yeni çalıştırılan programın bir ilgisi olmaz. O halde mademki exec yapıldığında artık üst prosesteki bu bu betimleyicilerin alt prosesteki yeni çalıştırılan program için bir anlamı kalmamaktadır, o halde bu betimleyicilerin kapatılması uygun olabilir. İşte UNIX türevi sistemler exec işlemleri sırasında üst prosesten gelmiş olan betimleyicilerin otomatik olarak kapatılmasına olanak vermektedir. İzleyen praragrafta bunun nasıl yapıldığını göreceksiniz. UNIX türevi sistemler her açılan dosya için proses kontrol bloğunda bir exec kapatma bayrağı (close on exec flag) tutarlar. Dosya normal olarak open fonksiyonuyla açıldığında exec kapatma bayrağı kapalı durumdadır. Bu bayrak kapalıyken exec işlemleri sırasında ilgili dosyaya ilişkin betimleyici açık olarak kalır. Eğer bayrak açık duruma getirilirse (set edilirse) bu durumda exec işlemleri sırasında ilgili dosya betimleyicisi otomatik olarak kapatılır. Dosyaların exec kapatma bayrakları 13

14 fcntl fonksiyonuyla açılabilir ya da kapatılabilir. fcntl fonksiyonunu 3. Bölümden biliyorsunuz. Bu fonksiyonun ikinci parametresinin F_SETFD girilirse üçüncü parametresinin betimleyici bayrakları biçiminde girilmesi gerektiğini anımsayınız. Exec kapatma bayrağı betimleyici bayraklarında FD_CLOEXEC ile tamsil edilmektedir. Bu durumda fd numaralı betimleyicinin exec kapatma bayrağını şöyle açabilirsiniz: fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) FD_CLOEXEC Betimleyicilerin exec kapatma bayraklarının varsayılan durumunun kapalı olduğunu bir kez daha anımsatalım. Benzer biçimde dup, dup2 gibi fonksiyonlar da yeni bir betimleyici oluşturduklarında -eski betimleyicilerin durumu ne olursa olsun- yeni betimleyicilerin exec kapatma bayrağını kapatmaktadır. Yani bu fonksiyonlarla elde ettiğimiz betimleyiciler exec işlemleri sırasında yeni programda açık olmaya devam ederler. Son olarak exec fonksiyonlarının ilginç bir özelliğinden söz etmek istiyoruz. Bu fonksiyonlar bizim doğrudan betik (script) programlarını çalıştırmamıza da izin veriyorlar. exec fonksiyonları program dosyasını açtığında eğer ilgili dosya çalıştırılabilir bir formatta değilse onun ilk satırına bakarak aşağıdaki özel işlemi uygularlar: 1. exec yapılmak istenen dosyanın bir metin dosyası olduğunu varsayarak onun ilk satırını bakarlar. Normal olarak ilk satırdaki karakterlerin aşağıdaki kalıba uygun olması gerekir:!# <yol ifadesi> [argüman] Gördüğünüz gibi exec fonksiyonları açtıkları metin dosyasının ilk iki karakterine bakarlar, eğer bu ilk iki karakter #! biçimindeyse bu karakterlerden sonraki boşluk karakterlerini atarak orada belirtilen yol ifadesini ve argüman listesini elde elderler. Buradaki yol ifadesi mutlaak ya da göreli olabilir. Yol ifadesini isteğe bağlı olarak bir argüman listesinin izleyebildiğine dikkat ediniz. 2. exec fonksiyonları açtıkları metin dosyasını değil, onun ilk satırından elde ettikleri yol ifadesinde belirtilen programı çalıştırırlar. 3. Çalıştırdıkları programa, exec işleminde ve betik dosyasının ilk satırında belirtilen komut satırı argümanlarını geçirirler. Örneğin testscript isimli bir metin dosyasının içeriği şöyle olsun:!# /bin/bas for x in istanbul ankara izmir do echo $x done Sonra dosyanın x haklarını aşağıdaki gibi oluşturalım: 14

15 chmod +x testscript Bu durumda yukarıdaki testscript dosyasına exec uyguladığımızda exec fonksiyonları bu dosyayı açacak ve onun ilk satırında belirtilen /bin/bash programını çalıştıracaklardır. Yani bu işlemin sonucunda testscript programı değil, /bin/bash programı çalıştırılmış olacaktır. Şimdi komut satırı argümanlarının aktarılmasına ilişkin bazı ayrıntılar üzerinde durmak istiyoruz. exec fonksiyonları ile dispargs isimli bir programı testscript isimli bir dosya yoluyla dolaylı biçimde çalıştırmak isteyelim. testscript dosyasının içeriği aşağıdaki gibi olsun: #! dispargs ali veli selami testscript dosyasını da execscript isimli programla exec işlemine sokalım: /* execscript */ #include <stdlib.h> int main(void) if (execl("testscript", "testscript", "ali", "veli", "selami", (char *) 0) < 0) perror("execve" dispargs ise komut satırı argümanlarını ekrana yazdıran basit bir program: /* dispargs */ int main(int argc, char *argv[]) while (*argv!= NULL) puts(*argv++ Bu örnek için dispargs ve execscript programlarını aşağıdaki gibi ayrı ayrı derlemelisiniz: gcc o dispargs dispargs.c gcc o execscript execscript.c 15

16 execscript programını çalıştırdığımızda elde edilen sonuç şöyledir: argv[0]:dispargs argv[1]:ayse fatma zeynep argv[2]:testscript argv[3]:ali argv[4]:veli argv[5]:selami Burada verdiğimiz örneği şöyle genelleştirebiliriz: a programı b isimli betik dosyasını çalıştırıyor olsun ve bu betik dosyası içerisinde c isimli program dosyasının belirtildiğini düşünelim. Bu durumda c dosyasına aktarılan komut satırı argümanları şöyle olacaktır: argv[0]: Betik dosyasında belirtilen yol ifadesi (örneğimizde c) argv[1]: Betik dosyasındaki komut satırı argümanları. (Yani b dosyasında c yol ifadesinin yanındaki argümanlar).tüm argümanlar ayrı ayrı değil tek bir yazı biçiminde geçirilmektedir. argv[2]: exec fonksiyonlarının birinci parametresinde belirtilen betik dosyasının yol ifadesi (Örneğimizde b) argv[3] argv[argc 1]: exec fonksiyonlarında belirtilen komut satırı argümanları her biri ayrı bir argüman olarak Son olarak bir nokta üzerinde durmak istiyoruz. Betik dosyalarını herhangi bir exec fonksiyonuyla çalıştırabiliriz. (Zaten pek çok sistemde diğer exec fonksiyonlarının dolaylı olarak execve fonksiyonunu çağırdığını biliyorsunuz.) exec fonksiyonlarının p li biçimleri ile bir betik dosyasını çalıştırdığımızda betik dosyasının kendisi PATH çevre değişkeni ile belirtilen dizinlerde aranır. Betik dosyası içerisinde belirtilen dosyanın aranması sırasında PATH çevre değişkenine bakılmamaktadır. Betik dosyasının içerisinde belirtilen dosya yol ifadesinin mutlak ya da göreli olarak belirtilip belirtilmediğine göre kök dizinden ya da prosesin çalışma dizininden itibaren aranacaktır. Eğer betik dosyasını exec fonksiyonlarının e li biçimiyle çalıştırırsak bu fonksiyonlarda belirttiğimiz çevre değişkeni betik dosyasında belirtilen programa geçirilecektir. [1] C nin <stdio.h> ve diğer bazı başlık dosyalarında bildirilen NULL sembolik sabiti NULL adres sabitini belirtmek zorundadır. NULL sembolik sabiti C de aşağıdaki iki biçimden biri olarak define edilmiş olabilir: #define NULL 0 #define NULL ((void *) 0) [2] Fonksiyonun ikinci parametresindeki const niteleyicisinin konumu size tuhaf gelebilir. Bu durum göstericinin gösterdiği gösterici dizisinin const olduğunu 16

17 belirtmektedir. Yani fonksiyonun ikinci parametresi bir gösterici dizisini göstermektedir ve fonksiyon bu gösterici dizisinin elemanlarında bir değişikilik yapmayacaktır. Yukarıdaki prototipin sektaks bakımından eşdeğeri şöyledir: int execv(const char *path, char * const *argv Fonksiyonun ikinci parametresi const char **argv biçiminde olmadığına dikkat ediniz. Eğer bu parametre const **argv biçiminde olsaydı, biz bu parametreye const olmayan bir gösterici dizisinin adresini argüman olarak geçiremezdik. Konuyu biraz daha açarsak, C de ve C++ ta T bir tür belirtmek üzere T * türünden const T * türüne doğrudan dönüştürme olduğu halde, T ** türünden const T** türüne doğrudan dönüştürme yoktur. Eğer böyle bir dönüştürme olsaydı aşağıdaki gibi hileli bir yöntemle const bir nesnenin içeriği değiştirilebilirdi: const int x = 10; int *pi; const int **ppi; ppi = π /* geçersiz ama geçerli olduğunu varsayalım */ *ppi = &x; /* geçerli (const int * türü const int * türüne atanıyor) */ Buradaki son işlemle aslında biz pi nin içerisine x in adresini atıyoruz. Artık pi yoluyla x i değiştirebiliriz: *pi = 20; /* geçerli, x değiştiriliyor */ [3] Bu şekil R. Stevens ın Advanced Programming in the UNIX Environment kitabından alınmıştır. Kaynaklar Aslan, K. (2002). UNIX/Linux Sistem Programlama Kurs Notları. İstanbul: C ve Sistem Programcıları Derneği. Bovet, D. and Cesati, M. (2006). Understanding the Linux Kernel, Third Edition. California: O'Reilly Media, Inc. ISO/IEC. (2003) :2003(E), Information techonolgy Portable Operating System Interface (POSIX) Part 2: System Interfaces. Love, R. (2007). Linux System Programming. California: O'Reilly Media, Inc. Raymond, E. S. (2008). The Art of UNIX Programming. Boston: Addison-Wesley. Stevens, R., Rago, S. A. (2005). Advanced Programming in the UNIX(R) Environment (2nd Edition). Addison-Wesley Professional. 17

İşletim Sistemlerinde Proseslerin Çevre Değişkenleri

İşletim Sistemlerinde Proseslerin Çevre Değişkenleri İşletim Sistemlerinde Proseslerin Çevre Değişkenleri Kaan Aslan 21 Temmuz 2008 Modern işletim sistemlerinde her prosesin bir çevre değişken bloğu vardır. Prosesin çevre değişken bloğu çevre değişkenlerinden

Detaylı

UNIX/Linux ve Windows Sistemlerinde Dosyaların ve Dizinlerin Silinmesi

UNIX/Linux ve Windows Sistemlerinde Dosyaların ve Dizinlerin Silinmesi UNIX/Linux ve Windows Sistemlerinde Dosyaların ve Dizinlerin Silinmesi Kaan Aslan 23 Temuz 2007 UNIX/Linux sistemlerinde bir dosyanın katı bağ sayısı 1 ise dosyayı tek bir dizin girişi göstermektedir.

Detaylı

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak

Detaylı

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0 Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Bitirme Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 01.06.2017 Süre : 60 dak. 1. t değişkeni hakkında aşağıdakilerden

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

Sınav tarihi : Süre : 60 dak.

Sınav tarihi : Süre : 60 dak. Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Final Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 31.05.2016 Süre : 60 dak. 1. Ekranda ne görüntülenir? int i =

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Kabuk Programlama (Bash)

Kabuk Programlama (Bash) Kabuk Programlama (Bash) Erkan Esmer Ocak, 2013 İçindekiler 1 Giriş.................................................... 2 2 Kabuk(Shell)............................................... 3 3 Çekirdek(Kernel).............................................

Detaylı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya

Detaylı

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA BLM-111 PROGRAMLAMA DİLLERİ I Ders-12 Fonksiyonlar Yrd. Doç. Dr. Ümit ATİLA [email protected] http://web.karabuk.edu.tr/umitatilla/ Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı

Detaylı

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar 1 BLM 112- Programlama Dilleri II Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar Dr. Öğr. Üyesi Caner Özcan Kendi yolculuğumuzu yapmak için buradayız; bu yolculukta kendimiz

Detaylı

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ TBIL-303-01 Veri Yapıları ve Algoritmalar LABİRENT HAZIRLAYAN 122132151 Fahri DÖNMEZ DANIŞMAN

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,

Detaylı

Regular Expressions Version 0.1

Regular Expressions Version 0.1 Regular Expressions Version 0.1 Hüseyin Kaya [email protected] 2001 Özet Bu belge Linux and Unix Shell Programming adlı kitaptan faydalalınarak yazılmıştır. Kitabın yazarı David Tansley. İngilizce bilenler

Detaylı

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI 10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI İkincil bellekte tanımlanmış bölgelere dosya denir. Her dosyanın bir ismi vardır. Ancak dosyaların isimlendirme kuralları sistemden sisteme göre değişebilmektedir. Dosya

Detaylı

Hafta 13 Fonksiyonlar

Hafta 13 Fonksiyonlar BLM111 Programlama Dilleri I Hafta 13 Fonksiyonlar Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı fonksiyonları ve kütüphane fonksiyonlarını birlikte kullanırlar.

Detaylı

C Konsol ve Komut Satırı

C Konsol ve Komut Satırı C Konsol ve Komut Satırı Öğr. Gör. M. Ozan AKI Rev 1.0 C:\> Konsol ekranı, işletim sistemi ve dosya yönetiminin metin tabanlı yönetilebilmesini sağlayan arabirimdir. Windows işletim sistemi ortaya çıkmadan

Detaylı

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Nisan 2009 9031150 - Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Referans: Bugün: 1. Ders Notları. Ders #4.1 Tekrar Dowhile ve for döngüleri Diziler Göstergeler 1. Tekrar for döngüleri Genel yazılımı

Detaylı

Pointer Kavramı. Veri Yapıları

Pointer Kavramı. Veri Yapıları Pointer Kavramı Veri Yapıları Pointer Kavramı- Pointer Nedir? Göstericiler, işaretçiler ya da pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi tutan değişkenlerdir. Şu ana kadar

Detaylı

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while Değişkenler Değişkenler bir bilginin bellekteki konumunu temsil eden sembolik isimlerdir. Bilgisayarda hemen hemen tüm işlemler bellekte yapılır. Program çalıştırıldığında değişken ve bu değişkenin türüne

Detaylı

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak. Selçuk Üniversitesi Mühendislik Fakültesi Harita Mühendisliği Bölümü Final Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :09.01.2013, 60 dak. Dikkat!!! Soru kitapçığında ve

Detaylı

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10 ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10 YZM 1105 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Giriş Esnek Argümanlı Fonksiyonlar main() Fonksiyonuna Parametre Aktarımı

Detaylı

Proses. Prosesler 2. İşletim Sistemleri

Proses. Prosesler 2. İşletim Sistemleri 2 PROSESLER Proses Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkinbirdenfazlaprosesolabilir. Görev

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Dosya İşlemleri (Rastgele Erişim)

Detaylı

Qt ile Bir Ağ Uygulaması

Qt ile Bir Ağ Uygulaması Qt ile Bir Ağ Uygulaması Aykut Aksoy [email protected] sürüm 1.0 Özet Bu belge Qt ile hazırlanmış bir ağ uygulamasını anlatır. C++ bilinmesi beklenir. Bu belgede "QProcess.h" kütüphanesine ağırlık verilmiştir.

Detaylı

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN Basit C Programları: Bir Metni Yazdırmak #include /* program çalışmaya main fonksiyonundan başlar*/ int main() { printf( "C diline hoşgeldiniz!\n"

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 DOSYALAMA Sunu Planı Veri Hiyerarşisi Dosyalar ve Akımlar(streams) Sıralı Erişim (Sequential Access) dosyalarının oluşturulması Sıralı Erişim Dosyalarından Veri Okuma Rasgele

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Veri Hiyerarşisi Dosyalara Giriş

Detaylı

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers) 5. İşaretç iler (pointers) C dilinin öyle bir özelliği vardır ki, programlama dilleri arasında kendisini diğerlerinden ayıran bir fark olarak sunulur: işaretçiler. Aslında, bazı diğer dillerde de direkt

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonu Referans ile Çağırma (Call by Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers) 1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y.

Detaylı

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe

Detaylı

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar Değer Döndüren Fonksiyonlar Çok Parametreli Fonksiyonlar Değişken Kapsamları Çok Fonksiyonlu Programlar Fonksiyon Tanımı Karmaşıkveuzunprogramları,

Detaylı

Programlama Dilleri 1. Ders 4: Diziler

Programlama Dilleri 1. Ders 4: Diziler Programlama Dilleri 1 Ders 4: Diziler Genel Bakış Tanım Dizilerin tanımlanması Dizilere ilk değer verilmesi Yerel ve Global diziler Dizilerin birbirine atanması Diziler ile ilgili örnekler Çalışma soruları

Detaylı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) { Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel

Detaylı

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir: Gereksiz Kodlar Kaan Aslan 9 Temuz 1997 Kapalı spor salonu, durak yeri, taşıt aracı, en optimum, geri iade etmek, davranış biçimi Bu ifadelerde bir gariplik var, değil mi? Açık spor salonu göreniniz var

Detaylı

PROSESLER. Proses. Proses

PROSESLER. Proses. Proses Proses 2 PROSESLER Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkin birden fazla proses olabilir.

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 [email protected] www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 6 Dr. Fatih AY Tel: 0 388 225 22 55 [email protected] www.fatihay.net Fonksiyon Prototipleri Fonksiyon Prototipleri Derleyici, fonksiyonların ilk hallerini (prototiplerini)

Detaylı

Göstericiler (Pointers)

Göstericiler (Pointers) C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş Özlem AYDIN NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü C DİLİNİN BİR ÜST-KÜMESİ OLARAK C++ Genel olarak, C de mevcut olan her şey C++ da da vardır. C dilinde

Detaylı

$ echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/x11r6/bin: /usr/local/sbin:/usr/local/bin:/usr/games:.

$ echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/x11r6/bin: /usr/local/sbin:/usr/local/bin:/usr/games:. Dosyaları bulmak Linux sistemleri içlerinde yüzlerce dosya barındırmaktadır. Her ne kadar bu dosyaların yerlerini kaybetmeyecek kadar usta olsanız bile, büyük bir ihtimalle bir tanesini bulmak için ara

Detaylı

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir. DİZGİLER (STRINGS) Dizgiler char tipli karakterlerin gruplanmş haline dizgi(string) denilir. Bazen katar ismide kullanılabilir. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir.

Detaylı

Linux'ta Kabuk ve Kabuk Programlama

Linux'ta Kabuk ve Kabuk Programlama Linux'ta Kabuk ve Kabuk Programlama Kabuk Nedir? Kabuk, kullanıcı ile bilgisayar sistemi arasındaki bir yazılım katmanıdır. Kabuk, kullanıcının hareketlerini yorumlayıp, işletim sistemini ve uygulamaları

Detaylı

1 PROGRAMLAMAYA GİRİŞ

1 PROGRAMLAMAYA GİRİŞ İÇİNDEKİLER IX İÇİNDEKİLER 1 PROGRAMLAMAYA GİRİŞ 1 Problem Çözme 1 Algoritma 1 Algoritmada Olması Gereken Özellikler 2 Programlama Dilleri 6 Programlama Dillerinin Tarihçesi 6 Fortran (Formula Translator)

Detaylı

Multicore/Multithread Programlama

Multicore/Multithread Programlama Multicore/Multithread Programlama Onur Tolga Şehitoğlu Bilgisayar Mühendisliği 7 Şubat 2008 Başlıklar 1 Gereksinimi Dal ile Süreç Çok İşlemci ve Dal Modelleri Neden Çoklu Dal Programlama? 2 Çok İşlemci/Çok

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak. Selçuk Üniversitesi Mühendislik Fakültesi Harita Mühendisliği Bölümü ra Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :13.04.2017 60 dak. Dikkat!!! Soru kitapçığında ve cevap

Detaylı

BİLG Dr. Mustafa T. Babagil 1

BİLG Dr. Mustafa T. Babagil 1 BİLG214 20.10.2009 Dr. Mustafa T. Babagil 1 Yapısal bilgi türlerinin tanımlanması. (C++ daki struct yapısı. ) Daha önce öğrenmiş olduğumuz bilgi tipleri char, int ve float v.b. değişkenler ile dizi (array)

Detaylı

Fonksiyonlar (Altprogram)

Fonksiyonlar (Altprogram) Fonksiyonlar (Altprogram) C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya gelmesi ile oluşur.

Detaylı

Hafta 12 Karakter Tutan Diziler

Hafta 12 Karakter Tutan Diziler BLM111 Programlama Dilleri I Hafta 12 Karakter Tutan Diziler Yrd. Doç. Dr. Caner ÖZCAN Katar (String) Tanımlama Dizileri ve çok boyutlu dizileri gördük. Katar dediğimiz şey de aslında bir dizidir. Değişken

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Veri Tipleri ve Özelilkleri Değişken Tanımlama Kuralları Değişken Veri Tipi Değiştirme (Type Casting) Örnek Kodlar Java Veri Tipleri ve Özelilkleri

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

Giriş. ENF102 Jeoloji

Giriş. ENF102 Jeoloji DİZİLER Arrays Giriş Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi bir kümedir; aynı türde verilere tek bir isimle erişmek için kullanılır.

Detaylı

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 111 ALGORİTMA VE PROGRAMLAMA I 1 BLM 111 ALGORİTMA VE PROGRAMLAMA I DİZİLER (ARRAYS) Kullanıcıdan N tane tamsayı, xi, alalım ve 1. Bu sayıların ortalamasını hesaplamak isteyelim ort = 0; for (i=0; i

Detaylı

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip

Detaylı

UNIX Türevi Sistemlerde Temel Dosya Fonksiyonları: open, close, read, write ve lseek

UNIX Türevi Sistemlerde Temel Dosya Fonksiyonları: open, close, read, write ve lseek UNIX Türevi Sistemlerde Temel Dosya Fonksiyonları: open, close, read, write ve lseek Kaan Aslan 12 Temuz 2008 Dosya sözcüğünü çok sık kullanırız. Fakat bu sözcüğü tanımlayabilmek o kadar kolay değildir.

Detaylı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2) BLM-112 PROGRAMLAMA DİLLERİ II Ders-3 İşaretçiler (Pointer) (Kısım-2) Yrd. Doç. Dr. Ümit ATİLA [email protected] http://web.karabuk.edu.tr/umitatilla/ Dinamik Bellek Yönetimi Bir program çalıştırıldığında

Detaylı

Süreç 1 Kavramı ve Oluşturma Yöntemleri

Süreç 1 Kavramı ve Oluşturma Yöntemleri İçindekiler Süreç Kavramı ve Oluşturma Yöntemleri...2 UNIX / Linux Sistemlerinde fork ve exec Sistem Çağrıları İle Süreç Kopyalama ve Çalıştırma...3 Thread Kavramı...7 Thread lerin İşletim Sistemleri Tarafından

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları Konsol Uygulaması Oluşturma Konsol uygulaması oluşturmak için program açıldıktan sonra Create: Project ya da New Project seçeneği tıklanabilir. New Project penceresini açmak için farklı yollar da vardır.

Detaylı

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER // 5 adet ogrenci icin 8 adet sinavi // temsil etmesi icin bir ogrenci tablosu // olusturuyoruz. Bunun icin 5x8 bir matris // yaratilmasi

Detaylı

C PROGRAMLAMA D İ L İ

C PROGRAMLAMA D İ L İ C PROGRAMLAMA DİLİ C Programlama Dilinin Temelleri C Programlama Dili'ni popüler kılan önemli nedenler aşağıda listelenmiştir: C, güçlü ve esnek bir dildir. C ile işletim sistemi veya derleyici yazabilir,

Detaylı

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri BLM-111 PROGRAMLAMA DİLLERİ I Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri Yrd. Doç. Dr. Ümit ATİLA [email protected] http://web.karabuk.edu.tr/umitatilla/ Temel Veri Tipleri C dilinde

Detaylı

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi();

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki

Detaylı

C Programlama printf() Fonksiyonu

C Programlama printf() Fonksiyonu C Programlama printf() Fonksiyonu Standart C kütüphanesinin bir parçası olan printf() C Programlama Dili'nin genel amaçlı çıktı alma fonksiyonudur. Girdi ve çıktı deyimleri gerçekte C dilinin bir parçası

Detaylı

Final Sınavı Soruları Güz, Süre: 90 Dakika

Final Sınavı Soruları Güz, Süre: 90 Dakika Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM 1105- Algoritma ve Programlama I Final Sınavı Soruları Güz, 2018-2019 Süre: 90 Dakika Derse Kayıtlı Olduğunuz Grubun Öğretim Üyesini (X)

Detaylı

Bigisayar Programlama

Bigisayar Programlama Bigisayar Programlama (GÜZ 2015) DERS-02: C de Programlamaya Giriş Yrd. Doç Dr. Yakup EMÜL Cumhuriyet Üniv., Teknoloji Fakültesi Yazılım Mühendisliği Bölümü [email protected] Ofis Saatleri :

Detaylı

BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ

BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ Kaynak: C ve Sistem Programcıları Derneği Kurs notu Öğr.Gör.Dr. Mahmut YALÇIN Bilinirlik Alanı Bilinirlik alanı (scope), bir ismin tanınabildiği program aralığıdır.

Detaylı

API(Application Programming Interface) Fonksiyonları:

API(Application Programming Interface) Fonksiyonları: API(Application Programming Interface) Fonksiyonları: Bir işletim sisteminin çalışırken kendisinin kullandığı, programcının da dışarıdan çağırabileceği fonksiyonları vardır. Bunlara sistem fonksiyonları

Detaylı

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1 Programlama Dilleri C Dili Programlama Dilleri-ders08/ 1 Yapısal Veri Tipleri C dili genişletilebilen bir dildir. Var olan veri tipleri kullanılarak yeni veri tipleri tanımlanıp kullanılabilir. Programlama

Detaylı

8. İŞARETCİLER (POINTERS)

8. İŞARETCİLER (POINTERS) 8. İŞARETCİLER (POINTERS) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ilişkilidir. Donanımsal açıdan adres bellekte yer gösteren

Detaylı

Linux altında komut satırında...

Linux altında komut satırında... -Kabuk (Shell) Unix ve benzeri işletim sistemlerinde kullanıcının komut yazmasını sağlayan, bu komutları yorumlayarak gerekli işlemleri yapan programlara kabuk (shell) adı verilir. Linux da bir kullanıcı

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 İşaretçiler ve Diziler Fonksiyon

Detaylı

Ders 2: Veri Tipleri, Değişkenler ve Sabitler

Ders 2: Veri Tipleri, Değişkenler ve Sabitler Ders 2: Veri Tipleri, Değişkenler ve Sabitler Giriş Orta ve yüksek seviyeli dillerin hemen hemen hepsinde veri tipi ve değişken kavramı bulunmaktadır. Bu kısımda C programlama dilindeki temel veri tipleri,

Detaylı

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

İnternet Programcılığı Öğr. Gör. Serkan AKSU  PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler PHP de Dizi-Değişkenler, Nesneler Dizilerle ilgili örneklere geçmeden önce aşağıdaki tabloyu inceleyelim. Tabloda dizi kavramının mantığı açıklanmaktadır. Tablonun tamamını bir dizi olarak düşünün ve bu

Detaylı

Bölüm 2 - C ile Programlamaya Giriş

Bölüm 2 - C ile Programlamaya Giriş 1 Bölüm 2 - C ile Programlamaya Giriş Başlıklar 2.1 Giriş 2.2 Basit C Programları: Bir Metni Yazdırmak 2.3 Basit C Programları: İki Tam Sayıyı Toplamak 2.4 Hafıza Konuları 2.5 C de Aritmetik 2.6 Karar

Detaylı

Temel Dosya İşlemleri. Kütük Organizasyonu 1

Temel Dosya İşlemleri. Kütük Organizasyonu 1 Temel Dosya İşlemleri Kütük Organizasyonu 1 Dosyaların Temel İşlemleri Bilgiler dosyada belirli bir düzen içerisinde yer alırlar Örn: ALAN THARP 100 100 100 JOHN BISHOP 70 80 75 PAUL AUSTER Bir satırda

Detaylı

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf İçindekiler 1. Giriş... 1 1.2. c++ Programı Yapısı... 2 1.3.Using Direktifi... 5 Bölüm 2. Veri türleri, değişken kavramı, sabit ve değişken bildirimleri ve c++ da kullanımı 7 2.1. Temel veri türleri...

Detaylı

#ifndef COMPLEX_H #define COMPLEX_H

#ifndef COMPLEX_H #define COMPLEX_H 16.10.2018 2018-2019 Güz Object-Oriented Programming Lab 03 Ön Çalışma - Bir kompleks sayının genliğini ve açısını hesaplamak için gerekli C/C++ fonksiyonları bulun, kütüphanelerini ve prototiplerini yazın,

Detaylı

Diziler (Arrays) Çok Boyutlu Diziler

Diziler (Arrays) Çok Boyutlu Diziler Diziler (Arrays) Çok Boyutlu Diziler ÇOK BOYUTLU DİZİLER Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir.

Detaylı

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ DERS 2 PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı

Detaylı

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta Ön bilgi: Özyineli fonksiyon tanımlanabilmeli. Dizilerin fonksiyon parametresi veya geri dönüş değeri olarak kullanımı bilinmeli. 1. Klavyeden girilen sayı n olmak üzere [1..n] aralığındaki sayıların toplamı

Detaylı

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ TBIL-303-01 Veri Yapıları ve Algoritmalar İki Yönlü Bağlantılı Liste Uygulaması HAZIRLAYAN

Detaylı

Diziler İndisli Değişkenler

Diziler İndisli Değişkenler Diziler İndisli Değişkenler Aynı tür bilgileri (öğrenci isimleri, şehir isimleri, kapı numaraları, fakülteler vbg.) bellekte tutmak için kullanabileceğimiz listelere dizi adı verilir. Dizi kullanmanın

Detaylı

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar: Dosyalama Çoğu programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. C programlama dilinde, disk dosyasına erişme (okuma ve yazma için) iki farklı yöntemle yapılır. Bunlar üst düzey ve alt

Detaylı

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ 3. Hafta YAPILAR Farklı veri tipindeki bilgilerin bir araya gelerek oluşturdukları topluluklara yapı (structure) denir. Yani yapılar, birbiriyle ilişkili değişkenlerin

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ [email protected] YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Bellek ve Adresleme Dinamik Bellek

Detaylı

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. C PROGRAMLAMA FONKSİYONLAR Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra

Detaylı

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr. Emel ARSLAN [email protected] C DİLİNDE FONKSİYONLAR C DİLİNDE FONKSİYONLAR C programlama dili fonksiyon olarak adlandırılan alt programların

Detaylı

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1 Programlama Dilleri C Dili Programlama Dilleri-ders02/ 1 Değişkenler, Sabitler ve Operatörler Değişkenler (variables) bellekte bilginin saklandığı gözlere verilen simgesel isimlerdir. Sabitler (constants)

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN malloc Malloc fonksiyonu bir değişken için hafızadan bir blok yer ayrılması için kullanılır. Eğer hafızada yeterli alan yoksa fonksiyon NULL döndürür. int *ptr; ptr = (int *)

Detaylı

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER DİZİLER Dizi Nedir? Aynı türden nesnelerin oluşturduğu, bellekte bitişik bir biçimde bulunan veri yapısına dizi denir.mesela alfabe diye bir dizi tanımlarız, harfleri a,b,c,d... diye sıralarız.dizinin

Detaylı

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Ders 9 C ++ Ön İşlemciler Prof. Dr. M. Serdar ÇELEBİ, İTÜ C ++ Önişlemciler Giriş #include Önişlemci Direktifi #define Önişlemci Direktifi: Sembolik Sabitler #define Önişlemci Direktifi : Makrolar

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 6: Diziler İçerik Diziler Dizi Elemanlarına İlk Atama Diziler ve Fonksiyonlar İki Boyutlu Diziler İki Boyutlu Dizi Tanımı İki Boyutlu Dizi Elemanlarına Erişim

Detaylı

UNIX/Linux ve Windows Sistemlerinde stdin, stdout ve stderr Dosyaları

UNIX/Linux ve Windows Sistemlerinde stdin, stdout ve stderr Dosyaları UNIX/Linux ve Windows Sistemlerinde stdin, stdout ve stderr Dosyaları Kaan Aslan 31 Mart 2010 Yalnızca UNIX/Linux sistemlerinde değil modern işletim sistemlerinin çoğunda aygıtlar birer dosyaymış gibi

Detaylı

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek Giriş DİZİLER Arrays Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi bir kümedir; aynı türde verilere tek bir isimle erişmek için kullanılır.

Detaylı

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING)

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING) ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING) 1. HAFTA KARAKTER Karakterler, programlarda kullanılan temel simgelerdir. Her karakterin ASCII kod tablosunda bir tamsayı değer karşılığı vardır ve C programlama

Detaylı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini

Detaylı

Görsel Programlama 1

Görsel Programlama 1 Görsel Programlama 1 1. Ekrana Hello world! yazan c# console application kodları: Console.Write("Hello world!"); 2. Ekranda ilk satıra Hello, ikinci satıra world! yazan kod: Console.WriteLine("Hello");

Detaylı