Példák kis programok

[Sygwin: környezet multiplatform programozás]

Cygwin: mi ez?

Cygwin - rövidítés jelentése „Cygnus” egy csoportja szabad fejlesztők
Szoftver a projekt keretében „RedHat” és a „Windows”, az összes kedvenc operációs
rendszer. Sietek eloszlatni egy nagyon népszerű szempontból, hogy cygwin - ez
UNIX emulátor Windows: ez nem így van! Cygwin - ez csak egy erős, fejlett
és ami a legfontosabb, egy ingyenes sor átviteli szoftver (számhordozás)
Unix szoftver Windows és cross-compile (hozzon létre egy bináris egy
platform alatt a másik) UNIX'ovgo szoftver. Nekem személy szerint az cygwin, először is,
Ez egy hatalmas gcc fordítóval polírozott Windows Heather és libami.

Cygwin most egyre nagyon népszerű: sok gyártó
szabad szoftver támogatás „--target = cygwin” a config UNIX
programok, az ellátás nem olyan időigényes. És cygwin viszont bővül
kompatibilitás a UNIX, támogató nemcsak posix, hanem más,
szűken specifikus szabványok UNIX-alapú rendszerekhez.

Cygwin: hol kell keresni?

Cygwin: mit és hogyan kell telepíteni?

Ide bármelyik cygwin'a tükrök. Látni fogja, három fő
könyvtárban: contrib legújabb és xfree. Az első - ez a program portolása
cygwin maga Cygnus'om és ehhez csak a hozzáférést a fő számára
könyvtár, cygwin1.dll. Harmadszor - úgy átültetni az X-kiszolgáló környezet alatt cygwin.
Szükségünk lesz a tartalmát a második könyvtár, a legújabb.

Ha azt szeretnénk programozni cygwin'e, akkor többé-kevésbé
Kényelmes munka van szüksége a legújabb verzióját hamu csomagok, autoconf,
automake, bash, binutils, bzip2, cygwin, diff, fileutils, findutils, gcc,
gperf, groff, gzip, kevesebb, login, m4, hogy az ember, mingw, mingw-runtime, ncurses,
tapasz, sed, sh-utils, kátrány, W32api, zlib és természetesen setup.exe. Ha
mániákus, akkor pumpálni a forrás ezeket a csomagokat.

Alapértelmezésben cygwin megkapja a kért könyvtárban belül
jogokat, hogy adja meg. Telepítése cygwin'a létre az asztalon
ikonra, és csattanó rajta, akkor találja magát egy nagyon bash'e, véleményem szerint, elég
konfigurált színeket.

cygwin1.dll: mi ez?

A könyvtár elsősorban cygwin1.dll egész posix, amely összeilleszti
cygwin, valamint néhány nagyon fontos cygwin'a funkciót. Nagyjából elmondható,
cygwin1.dll - ez a fő könyvtár cygwin'a kernel. Ne felejtsük el,
cygwin1.dll másolja a fájlt tetszőleges könyvtárba, ahova regisztrálva
'PATH =' például a '% Windir%' to cygwin'nye program működött
nem csupán a cygwin környezetben.

Ha valaha írott vagy összeállított UNIX programot, akkor nem
Meg fogja tapasztalni semmiféle nehézséget nem dolgozik a cygwin. Ne feledd, hogy
cygwin'ny gcc nem tudja támogatni néhány lehetőséget, hogy használja
a UNIX'e, bár a szám az ilyen félreértések minimalizálható. Az én koromban
például ilyen problémák nem merülnek fel. Mindenesetre, ha van olyan
probléma, mindannyian tudjuk, együtt a legjobb módja, hogy megoldja őket: „az ember gcc”. )))

Ha nem valaha, hogy vegyenek részt egy UNIX programozási
és arra használják, hogy nyomja meg a annak érdekében, hogy fordítsa le a programot,
nem idegesek. Próbáld az 'ember gcc a bash'e cygwin'a: igen
méltó és érdekes olvasni.

Nem leszek eredeti, tehát kezdjük, mint mindig és mindenhol, ahol
O „helló világ!” a konzolon. Tehát hello.c:

printf ( "Hello World \ n!");
vissza 0;

gcc -s hello.c -o hello.exe

és nézd meg a bináris. 3072 byte bináris kód, PE méret, hordozható
futtatható, letölthető dll:

A cygwin1.dll, ahol hello.exe tart, amíg a printf () és egyéb funkciók,
amely nakompiliroval minket gcc;

kernel32.dll, ahol hello.exe veszi GetModuleHandleA.

hanga gcc felveszi a / usr / include, azaz defoltnoy
inkludnoy könyvtár és a UNIX és cygwin'e.

A cygwin'nom gcc van egy nagyon jó lehetőség, ami valamilyen oknál fogva,
nem dokumentált a man-fájl „-mno-cygwin”. Mi lefordítani a programot
ezzel a funkcióval:

gcc -mno-cygwin -s hello.c -o hello.exe

és nézd meg a bináris: Ismét 3072 byte bináris kód, de a
program nem igényel cygwin1.dll! Ehelyett használja
msvcrt.dll, ahol megtaláljuk a kívánt funkciót printf.

Ha yuzaem opció '-mno-cygwin' cygwin dob gcc'shny preprocessor
a / usr / include / mingw, és ennek megfelelően állítja össze gcc
ez ebből a könyvtárból.

Azt javasoljuk, egy séta a tartalmát egy könyvtárba
/ Usr / include, annak érdekében, hogy megértsük, mi az, ami. Azt hiszem, akkor értékelni fogja az
tartalmát a / usr / include / sys és / usr / include / W32api.

---[Makefile (a neyuniksoidov, 'M' Makefile a nagybetűk):

# Apró makefile egy kicsi program

Az összes:
@echo Pick hogy posix "UNIX / cygwin vagy 'hogy a Windows' Windows

posix:
@printf "Building easy.c POSIX".
@printf "#define ENV_POSIX"> plateform.h
@gcc -s easy.c -o easy.exe
@echo ok!

windows:
@printf "Building easy.c az ablakokat."
@printf "#define ENV_WINDOWS"> plateform.h
@gcc -mno-cygwin -s easy.c -lws2_32 -o easy.exe
@echo ok!

#include "plateform.h"
#include

#ifdef ENV_POSIX
#include
#include
#include // a INADDR_ANY
#include // a jelet ()
#else
#include
#endif

int main (int argc, char ** argv)

struct sockaddr_in DST;
#ifdef ENV_POSIX
int zokni, SID;
#else
SOCKET zokni, SID;
WSADATA wsaData;
#endif
int LEN = sizeof (struct sockaddr);
char buf;
unsigned short port;

if (argc<2) printf("Usage: easy.exe \ N „);
vissza 1;
>

if (! port) printf ( „Bad definiált \ n „) !;
vissza 2;
>

#ifdef ENV_POSIX // in pozikse figyelmen kívül hagyjuk a jeleket, soha nem lehet tudni :)
jelet (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // ellenőrizzük Windows vinsoka változat, sosem lehet tudni :)
printf ( „ellenőrzésre, ha a WinSock2 változat egyenlő vagy nagyobb, mint 2,1.”);
ha (WSAStartup (MAKEWORD (2,1), wsaData) = 0!) printf ( "sikertelen \ n!");
vissza 1;
>
printf ( "ok \ n!");
fflush (stdout);
#endif

dst.sin_family = AF_INET;
dst.sin_addr.s_addr = htonl (INADDR_ANY);
dst.sin_port = htons (port);
zokni = socket (AF_INET, SOCK_STREAM, 0);
printf ( „Várakozás bejövő kapcsolatra.”); fflush (stdout);
bind (zokni, (struct sockaddr *) DST, len);
hallgatni (zokni, 1);
sid = fogadja (zokni, (struct sockaddr *) DST, len);
printf ( "Kész \ nWaiting bejövő adatok !."); fflush (stdout);
recv (sid, buf, 1,0);
printf ( "kapott: [% 2X].", buf); fflush (stdout);
buf ++;
Levél (sid, buf, 1,0);
printf ( "\ n végzett!");

#ifdef ENV_POSIX
bezár (zokni);
#else
WSACleanup ();
closesocket (zokni);
#endif

Tehát írja „make posix” lefordítani a programot
UNIX'om cygwin'nuyu vagy a közepes vagy „hogy a Windows” annak érdekében, hogy nem függ
által cygwin'a és csak kernel32.dll, ws2_32.dll és msvcrt.dll, amely
szerepel a standard csomag mindegyik Windows forgalmazás. Felhívjuk figyelmét,
A bináris 4096 byte cygwin, 4608 byte az ablakok. )

Ezúttal mindent! Várj röviddel a következő cikket a közeljövőben:

hálózati szkennelési technológiát: Coketny motor