Taşınabilir Kod Yazma



Benzer belgeler
B02.8 Bölüm Değerlendirmeleri ve Özet

int printf (const char *format [, argument,...]);

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

DÖNER SERMAYE MALİ YÖNETİM SİSTEMİ

B05.11 Faaliyet Alanı

PROGRAMLAMA TEMELLER. C Program Yap s

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

C Operatörler. Öğr. Gör. M. Ozan AKI. Rev 1.0

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR SİSTEMLERİ LABORATUARI YÜZEY DOLDURMA TEKNİKLERİ

CSD-OS İşletim Sistemi Projesi - Fonksiyon Açıklama Standardı

BQTEK SMS Asistan. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

1 Aralık E-Beyanname Modülünde Yapılan İşlemler

Temel Bilgisayar Programlama

Veri Toplama Yöntemleri. Prof.Dr.Besti Üstün

Digifresh Kullanım Kılavuzu

Karma C/C + + Kodlama

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

OPERATÖRLER BÖLÜM Giriş Aritmetik Operatörler

Genel bilgiler Windows gezgini Kes Kopyala Yapıştır komutları. 4 Bilinen Dosya Uzantıları

TS7200 PLATFORMU ÜZERİNDE SERİ PORT-ETHERNET DÖNÜŞTÜRÜCÜ UYGULAMASI

1. Yapılan ayarları kontrol etmek 2. Hataların doğru anlaşıldığından emin olmak 3. Donanıma uygun işletim sistemini belirlemek İŞLEM ANALİZ FORMU

Q-BIZ VIEWER KULLANIM KILAVUZU

Uzem Eğitmen Girişi. Şekil 1. Sisteme girdikten sonra Şekil 2 deki ekran karşımıza çıkacak. Bu ekrandaki adımları kısaca tanıyalım.

ÖĞRENME FAALĠYETĠ GELĠġMĠġ ÖZELLĠKLER

Yedekleme ve Kurtarma Kullanıcı Kılavuzu

BİT ini Kullanarak Bilgiye Ulaşma ve Biçimlendirme (web tarayıcıları, eklentiler, arama motorları, ansiklopediler, çevrimiçi kütüphaneler ve sanal

Eln 1001 Bilgisayar Programlama I

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

SÜREÇ YÖNETİMİ VE SÜREÇ İYİLEŞTİRME H.Ömer Gülseren > ogulseren@gmail.com

Analiz aşaması sıralayıcı olurusa proje yapımında daha kolay ilerlemek mümkün olacaktır.

KOCAELİ İL MİLLİ EĞİTİM MÜDÜRLÜĞÜ EVRAK TAKİP SİSTEMİ

Backup Premium Hızlı Başlangıç Kullanım Kılavuzu

Dr. Fatih AY Tel: fatihay@fatihay.net

13 Kasım İlgili Modül/ler : Satın Alma ve Teklif Yönetimi. İlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL

İÇİNDEKİLER. 1. Projenin Amacı Proje Yönetimi Projenin Değerlendirilmesi Projenin Süresi Projenin Kapsamı...

Hackerlar'ın Gözünden Flash Uygulamaları

İşletim Sisteminin Katmanları


YÜKSEKÖĞRETİM KURUMLARI ENGELLİLER DANIŞMA VE KOORDİNASYON YÖNETMELİĞİ (1) BİRİNCİ BÖLÜM. Amaç, Kapsam, Dayanak ve Tanımlar

VEGAWINA VERSION

Tasarım Raporu. Grup İsmi. Yasemin ÇALIK, Fatih KAÇAK. Kısa Özet

EĞİTİM BİLİMİNE GİRİŞ 1. Ders- Eğitimin Temel Kavramları. Yrd. Doç. Dr. Melike YİĞİT KOYUNKAYA

DERLEYİCİ TASARIMI ÖDEV-2 RAPORU


Autodesk Building Design Suite Sorular ve Cevapları

OYUN GELİŞTİRME AŞAMALARI-I. Oyununuzun senaryosunu kısaca tanıtınız/ amacınıda belirtiniz:

ARDUİNO VE GPS MODÜLÜ İLE GPS KOORDİNATLARININ ALINMASI ARDUİNO VE SD KART MODÜLÜ İLE KULAKLIKTAN SES ÇALMA

MAKÜ YAZ OKULU YARDIM DOKÜMANI 1. Yaz Okulu Ön Hazırlık İşlemleri (Yaz Dönemi Oidb tarafından aktifleştirildikten sonra) Son aktif ders kodlarının

İstemci Yönetimi ve Mobile Printing (Mobil Baskı) Çözümleri

KAVRAMLAR. Büyüme ve Gelişme. Büyüme. Büyüme ile Gelişme birbirlerinden farklı kavramlardır.

Linux Sistemlerde Silinmiş Dosyaları. Forensics)

Braille Star 40 Başvuru Kitapçığı Sürüm 4.0 Lütfen bu başvuru kitapçığıyla birlikte paketinizde bulunan kullanıcı kılavuzunu da gözden geçirin.

Anonim Verilerin Lenovo ile Paylaşılması. İçindekiler. Harmony

Topoloji değişik ağ teknolojilerinin yapısını ve çalışma şekillerini anlamada başlangıç noktasıdır.

İZMİR KÂTİP ÇELEBİ ÜNİVERSİTESİ ENGELSİZ ÜNİVERSİTE KOORDİNATÖRLÜĞÜ VE ENGELLİ ÖĞRENCİ BİRİMİ ÇALIŞMA USUL VE ESASLARI BİRİNCİ BÖLÜM

BİLGİSAYAR DESTEKLİ BİR DİL PROGRAMI -Türkçe Konuşma - Tanıma Sistemi-

Yandaki resimlerde Excel Pazartesi den başlayarak günleri otomatik olarak doldurmuştur.

ETKİLEŞİMLİ TAHTA KORUMA SİSTEMİ KURULUM

KolayOfis Başlangıç Rehberi Kısa Mesaj Yönetimi

K12NET Eğitim Yönetim Sistemi

Kurumsal Yönetim ve Kredi Derecelendirme Hizmetleri A.Ş. Kurumsal Yönetim Derecelendirmesi

AĞ ÜZERİNDEN YAZICI ve TARAYICI TANIMLAMA KLAVUZU

5510 sayılı SGK kanunu hakkında duyurular

İçindekiler Şekiller Listesi

YATIRIM FONU ALIM SATIM İŞLEMLERİ KULLANICI KILAVUZU

Öncelikle Markamıza göstermiş olduğunuz ilgiden dolayı teşekkür ederiz.

İçinde x, y, z gibi değişkenler geçen önermelere açık önerme denir.

Ç.Ü. GÜZEL SANATLAR FAKÜLTESİ İÇ MİMARLIK BÖLÜMÜ GÜZ YARIYILI İÇM PROJE 5 & DİPLOMA PROJESİ

ENF TEMEL BİLGİSAYAR BİLİMLERİ Eğitim/Öğretim Yılı Bahar Dönemi DÖNEM SONU LAB. ÖDEV TESLİM DUYURUSU

İTÜ GELİŞTİRME VAKFI ÖZEL Dr. NATUK BİRKAN İLKOKULU VE ORTAOKULU. OkulNET Kullanım Kılavuzu

Sürücü Gönder. Yönetici Kılavuzu

KAMU İHALE KANUNUNA GÖRE İHALE EDİLEN PERSONEL ÇALIŞTIRILMASINA DAYALI HİZMET ALIMLARI KAPSAMINDA İSTİHDAM EDİLEN İŞÇİLERİN KIDEM TAZMİNATLARININ

a) Birim sorumluları: Merkez çalışmalarının programlanmasından ve uygulanmasından sorumlu öğretim elemanlarını,

Com Donatı v5 Kurulum ve Hata Çözümleri İçindekiler

SÜRE BİLİŞİM TEKNOLOJİLERİ ÜNİTE 1: : BİLGİ VE TEKNOLOJİ DERS SAATİ: 7

Evrak Ekle. Kurum İçi Giden Evrak Ekleme. Kırmızı renker; doldurulması zorunlu alanları ifade etmektedir. İleri Geri tarihli işlem yapılamamaktadır.

BULUġ BĠLDĠRĠM FORMU/ GIDA

1. YAPISAL KIRILMA TESTLERİ

ELEKTRONĐK TĐCARETĐN DÜZENLENMESĐ KANUNU 1 MAYIS 2015 TE YÜRÜRLÜĞE GĐRDĐ

YÜZÜNCÜ YIL ÜNİVERSİTESİ

Karadeniz Teknik Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuarı

BIM BUILDING INFORMATION MODELING YAPI BİLGİ MODELİ

Araştırma Notu 15/177

WEB SAP (ORION) STAJ BAŞVURU KULLANICI DÖKÜMANTASYONU. Süheyla GÜVEN

MESLEKİ UYGULAMA ESASLARI YÖNETMELİĞİ DEĞİŞİKLİK KARŞILAŞTIRMA ÇİZELGESİ. Geçerli yönetmelik tarihi : MEVCUT MADDE ÖNERİLEN GEREKÇE

Windows VISTA Ultimate Kurulumu ve Yönetimi

Android Uygulamalarında Güvenlik Testi

İçindekiler. İkinci Bölüm - Renkler 2.1. Kurumsal Renk Değerleri Yardımcı Kurumsal Renk Değerleri...

29 Ocak 2015 Senato Sayı : 123 YÖNERGE

Yedi Karat Kullanım Klavuzu. Yedi Karat nedir? Neden Karat?

ELITE A.G. KS100/HEFM SICAK-SOĞUK ETĐKET BOY KESME VE ĐŞARETLEME MAKĐNASI KULLANIM KILAVUZU

in Kullanımı tamamlamış gerçekleştirmiş

Modem ve Yerel Ağ Kullanım Kılavuzu

BCN V A MİKROİŞLEMCİLİ AKÜ ŞARJ CİHAZI

DOKÜMAN YÖNETİM SİSTEMİ KULLANIMI GELEN EVRAK

Yakıt Özelliklerinin Doğrulanması. Teknik Rapor. No.: 942/

Fizik ve Ölçme. Fizik deneysel gözlemler ve nicel ölçümlere dayanır

YILDIRIM BEYAZIT ÜNİVERSİTESİ İŞ SAĞLIĞI VE GÜVENLİĞİ KOORDİNATÖRLÜĞÜ YÖNERGESİ BİRİNCİ BÖLÜM

ALGORİTMA VE PROGRAMLAMA II

Bülten Başlığı. Birincil Yazı Başlığı. İkincil Yazı Başlığı. İş Adı. İlgi çeken özel konular: Bu sayıda:

Transkript:

Taşınabilir Kod Yazma Temel İlkeler ve Problemler Barış Şimşek Bilgisayar Müh. http://www.enderunix.org/simsek/ EnderUNIX Yazılım Geliştirme Takımı

Başlarken Bu sunum yalnızca merak uyandırmak için hazırlanmıştır! Bir klavuz değildir. 1988 de POSIX olarak bilinen IEEE Std 1003.1-1988 bir Amerikan standardı olarak yayınlandı. 1990 yılında IEEE Std 1003.1-1990 bir dünya standardı olarak yeniden yayınlandı. POSIX = IEEE Portable Operating System Interface for Computing Environments

POSIX POSIX, işletim sistemi için temel bir arayüz tanımlar. C programlama arayüzü, sistem dosyaları, dosya biçimleri... POSIX.1 karakter tabanlı uygulamalar içindir. Ağ ve grafik gibi farklı alanlara ait standartları içermez. POSIX.8 bu alanlar için oluşturulmuştur. POSIX sistem yönetimine dair standartlar içermez. Nasıl yedekleme yapılır, nasıl kullanıcı açılır, nasıl paket yüklenir...

POSIX ve UNIX POSIX System V ve Berkeley UNIX üzerine inşa edilmiştir. POSIX bir işletim sistemi sunmaz!

POSIX Geliştirme Ortamı POSIX uyumlu kod yazmak için bir başlık dosyası (.h) veya bir kütüphane yüklemeniz gerekmez. POSIX geliştirme ortamına ulaşmak için: #define _POSIX_SOURCE 1 Bunu işletim sistemi sahibi firma derleyicide uygular. Sizin detayları bilmenize gerek yoktur.

Port Etme Kaynak Kod #include <stdio.h> #include <sys/time.h> main(argc,argv) int argc; char **argv; { struct timeval tv; struct timezone tz; gettimeofday(&tv,&tz); printf("the current time is:\n%s", ctime(&tv.tv_sec)); if (tz.tz_dsttime) printf("daylight savings time\n"); else printf("standard time\n"); exit(0); } /* POSIX Programmer s Guide,Donald A. Lewine, Oreilly */

Port Etme Sorunlar <sys/time.h> başlık dosyası yok. (POSIX için) struct timeval ve struct timezone yapıları yok. POSIX gettimeofday() fonksiyonunu içermiyor. Not: Hedef işletim sistemi, BSD 4.2 gibi yukarıdaki üç taşınabilirlik problemlerini içermiyorsa derleme sorunsuz gerçekleşir. Bu kodun taşınabilir olduğu anlamına gelmez. Bu durumları göz ardı ediyoruz.

Port etme - Çözümler <sys/time.h> yerine <time.h> yerleştirilir. timeval ve timezone yapılarına gettimeofday() fonksiyonu için ihtiyacımız var. gettimeofday() un dönüş değeri, ctime() ın parametresi olarak kullanılıyor. Bu parametrenin eş değeri olarak localtime(timer) kullanılabilir. localtime(), zaman değerini struct tm yapısına çevirir.

Port etme - çözüm tm yapısı <time.h> içinde şu şekilde tanımlanmıştır. int tm_sec; /* seconds (0-60) */ int tm_min; /* minutes (0-59) */ int tm_hour; /* hours (0-23) */ int tm_mday; /* day of month (1-31) */ int tm_mon; /* month of year (0-11) */ int tm_year; /* year - 1900 */ int tm_wday; /* day of week (Sunday = 0) */ int tm_yday; /* day of year (0-365) */ int tm_isdst; /* is summer time in effect? */ char *tm_zone; /* abbreviation of timezone name */ long tm_gmtoff; /* offset from UTC in seconds */ isdst, 0 dan farklı ise yaz saati etkin demektir.

Sonuç #define _POSIX_SOURCE 1 #include <stdio.h> #include <time.h> main(argc,argv) int argc; char **argv; { struct tm *tmptr; time_t timer; timer = time(null); tmptr = localtime(&timer); printf("the current time is:\n%s", ctime(&timer)); if (tmptr -> tm_isdst) printf("daylight savings time\n"); else printf("standard time\n"); exit(0); } /* POSIX Programmer s Guide,Donald A. Lewine, Oreilly */

%100 uyumlu Koddaki büyük taşınabilirlik sorunlarını çözerek taşınabilir kod elde ettik diyebiliriz artık. Ancak biraz daha dikkatle bakarsak hala taşınabilir olmayan kod parçacıkları var. Gerekli tüm başlıkları eklediğimizden emin miyiz? exit() <stdlib.h> gerektirir. exit(0) da başarılı dönüş olarak 0 yazdık. POSIX bunu EXIT_SUCCESS olarak tanımlamıştır. exit(exit_success) Biraz açıklama eklemeyi ihmal etmemeli. Artık ULTRIX e hatta VAX/VMS e bile port ettik diyebiliriz.

Masaüstü Karışık Olanlara Fonksiyonları bir bir taşınabilir olanları ile değiştirmek yerine #ifdef yapıları kullanarak kodu işletim sistemine göre seçimlik hale getirebilirsiniz. #ifdef BSD struct timeval tv; struct timezone tz; #else struct tm *tmptr; #endif Bu durumda yönetilmesi gereken iki kod dalı vardır. 10000 satır bir programda bu yöntemi kullanırsanız 10001.satırı nereye ekleyeceğinizi bulmakta zorlanacaksınızdır.

POSIX in Sundukları Arayüzler semboliktir. İşletim sistemine göre gösterim yapar. Örneğin süreç ID si pid_t veya dosya hakkı mode_t olarak tanımlanmıştır. Bunlar hedef sisteme göre int, unsigned short gibi değerler alırlar. ioctl() gibi çok amaçlı fonksiyonlar, belirli bir görevi gerçekleştiren hususi birkaç fonksiyonla değiştirilmiştir.

Şablon Kullanın Kodlar yeniden kullanılabilir olsun. Program, tek bir kaynak dosyada olmasın. Dosyalara bölünmeli veya modüler yazılmalı. Bu şekilde farklı kişilerin kodu yürütmesi mümkün hale gelir. Modülerlik aynı zamanda yeniden kullanılabilirliğin de şartıdır. Bir şablon kullanın.

/* Feature test switches */ #define _POSIX_SOURCE 1 /* System headers */ #include <stdio.h> /* Local headers */ #include global.h /* Macros */ #define AVARAGE (SUM / NELEM) /* File scope variables */ static int workdir; /* External variables */ extern int errno; /* External functions */ int getword(char *line); /* Structures and unions */ /* Signal catching functions */ /* Functions */ /* Main */

Sorunlar: G/Ç Printf: Ekrana basılan şeyler sisteme göre küçük değişiklik gösterebilir. Örneğin %e en az 2 hane üs içermeli. %d %i %o %u %x ve %X dönüştürdükleri değerin int boyutuna sahip olduğunu varsayar. Eğer parametre short (küçük tamsayı) ise %hd %hi %ho %hu %hx ve %hx kullanın. Büyük tamsayı (long) ise %ld %li %lo %lu %lx ve %lx kullanın. Bazı sistemlerde printf() in bir defada ekrana basacağı karakter 509 ile sınırlıdır. Bazı sistemlerde bu değer daha yüksektir. Bu nedenle büyük buffer lar birkaç adımda ekrana basılmalı.

Sorunlar: G/Ç Format stringleri güvenilir şekilde kullanın. printf(str); /* yanlış */ printf( %s, str); /* doğru */ Ekrana basılan değer ile belirtilen format string aynı mı kontrol edilmeli. printf( Integer %d\n, str); putc bazen fputc ye tanımlı bir makro olabilir. Bu nedenle putc(i, file++) gibi bir kullanımdan kaçının. Makro tanımına bağlı olarak çalışmayabilir. scanf için okunacak veri büyüklüğü belirtilmeli. Yoksa bellek taşması olur ve verilerimizi kaybederiz. Bu büyüklük otomatik olarak yerleştirilen NULL ı da içermeli.

Sorunlar: G/Ç fread ve fwrite gibi doğrudan dosyaya yazan/okuyan fonksiyonlar tamamen taşınabilirdir. Ancak yazdıkları veya okudukları veri taşınabilir olmayabilir. Bu nedenle okunan değerler doğru yorumlanmalı. Geçici dosyalar için tmpnam ve tmpfile() kullanın. Dosya isimleri de taşınabilir olmalı: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 0. _ - - sembolü en başta olmamalı. Ayrıca dosya ismi en fazla 14 karakter olmalı. Eğer dosya ismi dışardan okunuyorsa bunlar kontrol edilmelidir.

Sorunlar: Süreçler fork() Yeni süreç oluşturmak için kullanılan fork çağrısı taşınabilir bir çağrıdır. BSD, bu işlemi hızlandırmak için vfork() çağrısına sahiptir. Bu tamamen taşınabilir değildir. #ifdef BSD pid = vfork(); #else pid = fork(); #endif Değer vermeden return yapmak taşınabilir değildir. _exit yerine C kütüphanesi ile gelen exit() kullanmak daha taşınabilir özelliktedir.

Sorunlar: Süreçler Ölümcül hata oluşmadıkça abort() ile sonlandırma yapılmamalı. Tabi core dosyası oluşturmak için gerekli. Sinyal yönetiminde eski uygulamaların pek çok sorunu var. BSD bunları düzeltti. POSIX BSD sinyalleri üzerine bina edilmiştir. Sinyal yakalandığında sinyal işleyicisi çalışır. Sinyal geldiğinde program bir fonksiyonun ortasında olabilir. Bu nedenle güvenli olmayan fonksiyonlar sinyal işleyici tarafından çağrılmamalı. Örneğin printf ve türevleri güvenli değildir, unlink güvenlidir.

Sorunlar: Endians Tek bir byte alana sığmayan sayılar bellekte belli bir sırayla ardışıl byte lara yerleştirilir. Sayının en anlamlı bitlerinin önde olması veya en anlamsız bitlerinin önde olması platformlara göre değişir. Bu sıra little-endian ve big-endian olarak adlandırılır. int i = 4; char c = *(char *) i; Sayılar bir dosyaya yazıldığında veya iki platform arasında ağdan geçtiğinde bu dönüşümlerin yapılması lazımdır. Yoksa en anlamlı byte ile en anlamsız byte yer değiştirmiş olur ve farklı bir sayı okunmuş olunur. write (fd, &i, sizeof i); /* Taşınabilir değil. */

Sorunlar: Endians Yukarıdaki kod taşınabilir değildir. Çünkü i nin her platformda boyutunun aynı olduğunu varsayıyor. Basit bir çözüm: int j; char buf[4]; for (j = 0; j < 4; ++j) buf[j] = (i >> (j * 8)) & 0xff; write (fd, buf, 4); Diğer bir çözümde adres/port dönüşümleri için çokça kullanılan htons() ve ntohs() fonksiyonlarını kullanmaktır. TCP/IP bigendian kullanır. Dolaysıyla big-endian sistemlerde aldıkları parametreyi aynen döndürür, little-endian sistemlerde ise ardışıl byte ların yerini değiştirir.

GNU Autotools GNU Autotools (Autoconf, automake, libtool) yazılımları daha taşınabilir hale getirmek, farklı platformlarda kolaylıkla program yükleyebilmek için araçlar sunmaktadır.

Autotools Autoconf, sisteminiz üzerinde bazı testler yaparak sisteminizin karakteristiklerini keşfetmeye çalışır. Bu işlemler kodun derlemesinden önce yapılır. Bu nedenle kaynak kodu sistemin karakteristiklerine göre değiştirebilir. Automake, Makefile oluşturur. Libtool, derleyici ve linker arasında bir arayüzdür. Üzerinde çalışılan platformun ne olduğunu bilmeden kolaylıkla taşınabilir statik ve shared kütüphane oluşturmaya yardımcı olur.

Makefile target1: dep1 dep2... depn <tab> cmd1 <tab> cmd2 <tab>... <tab> cmdn target2: dep4 dep5 <tab> cmd1 <tab> cmd2 dep4 dep5: <tab> cmd1

Örnek qsheff: spool @echo "$@, djb gerektirir..." spool: mkdir $@ # make qsheff mkdir spool qsheff, spool gerektirir...

Configure.in Sistem karakteristiğini test etmek için yapılacak işlemler merkezi olarak configure.in den yönetilir. Configure.in geliştirici tarafından oluşturulur. Bu dosya kullanılarak configure betiği oluşturulur. Programı kuran sistem yöneticileri bu betiği kullanır. AC_CHECK_FUNCS(inet_aton inet_addr, break) #if HAVE_INET_ATON inet_aton kullanilacak kod parçası #else #if HAVE_INET_ADDR inet_addr kullanılacak kod parçası #else #error Function missing! #endif #endif

UNIX ler Arası Fonksiyonlar POSIX.1 in tanımlamadığı fonksiyonlar tüm UNIX lerde olmayabilir. Bunları kontrol etmek için configure.in içerisinde AC_CHECK_FUNCS yapısı kullanılabilir. Tüm sistemlerde olmayan bazı fonksiyonlar: Alloca, dlopen, getline, getpagesize, gettimeofday, mmap, ptrace, setuid, snprintf, strcasecmp, strncasecmp, strdup, valloc, vfork

Configure.in Configure.in: AC_CHECK_FUNCS(strcpy bcopy) *.h (kaynak kod tarafından dahil edilen): #if!have_strcpy # if HAVE_BCOPY # define strcpy(dest, src) bcopy (src, dest, 1 + strlen (src)) # else /*!HAVE_BCOPY */ error no strcpy or bcopy # endif /* HAVE_BCOPY */ #endif /* HAVE_STRCPY */

autoscan Kod içerisindeki tüm kütüphane fonksiyonlarını gözden geçirip taşınabilir/taşınamaz şekilde geliştiricinin işaretlemesi zor olacaktır. Autotools bunun için autoscan aracını sunmaktadır. Autoscan, sizin için tüm kaynak kodları inceleyerek bilenen taşınabilirlik problemleri için bir configure.in oluşturur. Geliştirici kendi kurallarını buna ilave eder

autoscan AC_INIT(sic/eval.h) # Checks for programs. # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(strings.h unistd.h) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_VPRINTF AC_CHECK_FUNCS(strerror) AC_OUTPUT()

Kaynaklar Bu doküman aşağıdaki kaynaklar esas alınarak hazırlanmıştır. POSIX Programmer's Guide, Writing Portable UNIX Programs with the POSIX.1 Standard, Donald A. Lewine ClamAv Projesi Configure.in dosyasi, http://www.clamav.net/

- Son - Bu sunumu aşağıdaki adresten temin edebilirsiniz: http://www.enderunix.org/slides/