Exemple de programe mici

[Sygwin: mediu de programare multiplatformă]

Cygwin: ce este?

Cygwin - este o abreviere pentru „Cygnus“, un grup de dezvoltatori gratuite
Software-ul în cadrul proiectului „RedHat“ și „Ferestre“, toate de operare noastre preferate






sistem. Mă grăbesc să risipească un punct foarte popular de vedere că Cygwin - l
UNIX emulator În Windows: nu este așa! Cygwin - aceasta este doar un puternic, foarte dezvoltat
și, cel mai important, un set gratuit de software-ul de transfer (portare)
Software Unixurile pentru Windows și compileze (creați unul binar
platformă sub alte software UNIX'ovgo). Pentru mine personal, The Cygwin, în primul rând,
Este un compilator GCC puternic, cu lustruit sub Windows Heather și libami.

Cygwin acum devine destul de popular: mulți producători
suport software liber „--target = Cygwin“ în configurare pe UNIX
programe, beneficiul nu este la fel de consumatoare de timp. Și Cygwin, la rândul său, se extinde
compatibilitatea cu UNIX, un sprijin de POSIX nu numai, dar altele, mai mult
restrâns sisteme de standarde specifice bazate pe UNIX.

Cygwin: în cazul în care să se uite?

Cygwin: ce și cum se instalează?

Du-te la oricare dintre oglinzi cygwin'a. Vei vedea trei mari
director: contrib, cele mai recente și XFree. În primul rând - acest program portat
Cygwin în sine Cygnus'om și necesită acces numai la principal pentru
bibliotecă, cygwin1.dll. În al treilea rând - este portarea mediul X-server sub Cygwin.
Vom avea nevoie de conținutul celui de al doilea director, cele mai recente.

Dacă doriți să programați în cygwin'e, apoi mai mult sau mai puțin
de lucru confortabil aveți nevoie de ultima versiune de pachete de cenușă, autoconf,
Automake, bash, binutils, bzip2, Cygwin, dif, fileutils, findutils, GCC,
gperf, groff, gzip, mai puțin, de conectare, m4, fac, om, MinGW, MinGW-rulare, ncurses,
patch-uri, sed, sh-utils, tar, W32api, zlib și, în mod natural, setup.exe. Dacă
maniac, puteți pompa sursa acestor pachete.

În mod implicit, Cygwin devine pe directorul solicitat în cadrul
drepturi pe care îl specificați. Instalarea cygwin'a a crea desktop
pictograma și făcând clic pe ea, te vei găsi într-o foarte bash'e, în opinia mea, destul de
culori configurate.

cygwin1.dll: ce este?

Biblioteca se concentrează POSIX întreaga cygwin1.dll, care emulează
Cygwin, precum și unele funcții foarte importante cygwin'a. Aproximativ vorbind,
cygwin1.dll - aceasta este principala bibliotecă cygwin'a kernel-ul său. Nu uita
cygwin1.dll copiați fișierul în orice director la care v-ați înregistrat
'PATH =', de exemplu, în '% windir%' to cygwin'nye program de lucrat
nu numai în mediul Cygwin.

Dacă ați scris sau compilate în cadrul programului UNIX vreodata, nu faci
Vei experimenta nici o dificultate în lucrul cu Cygwin. Doar amintiți-vă că
cygwin'ny gcc nu poate susține unele dintre opțiunile pe care le utilizați
în UNIX'e, deși numărul acestor neînțelegeri este redus la minimum. La vârsta mea,
de exemplu, nu apar astfel de probleme. În orice caz, dacă există






problemă, știm cu toții împreună cel mai bun mod de a le rezolva: „om gcc“. )))

Dacă nu oricând înainte de a se angaja într-o programare UNIX
si sunt folosite pentru a apăsa în scopul de a compila programul,
nu ar trebui să se supere. Încercați „om GCC“ în cygwin'a bash'e: destul
lectură demn și fascinant.

Nu voi fi original, așa că vom începe, ca întotdeauna și peste tot, cu
O „Bună ziua lume!“ pe consola. Deci, hello.c:

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

gcc -s hello.c o- hello.exe

si uita-te la binar. 3072 octeți de cod binar, format PE, portabile
executabil, DLL descărcabil:

cygwin1.dll, în cazul în care hello.exe ia printf noastre () și alte funcții,
care ne nakompiliroval GCC;

kernel32.dll, în cazul în care hello.exe ia GetModuleHandleA.

buruiană ponturi de GCC / usr / include, care este defoltnoy
inkludnoy director și UNIX și cygwin'e.

În GCC cygwin'nom există o opțiune foarte frumos, care, pentru un motiv oarecare,
nu documentată în om-fișier, „-mno-Cygwin“. Noi compila programul nostru
cu această opțiune:

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

si uita-te la binar: Din nou, 3072 bytes de cod binar, dar nostru
Programul nu mai are nevoie de cygwin1.dll! În schimb, folosește
Msvcrt.dll, în cazul în care vom găsi funcția printf dorită.

Dacă ne yuzaem opțiunea '-mno-Cygwin', aruncă Cygwin preprocesorul gcc'shny
în directorul / usr / include / MinGW și, în consecință, compilează GCC
este din acest director.

Vă recomandăm insistent o plimbare prin conținutul unui director
/ Usr / include, în scopul de a înțelege ceea ce este ceea ce. Cred că veți aprecia
conținutul directorul / usr / include / sys și / usr / include / W32api.

---[Makefile (pentru neyuniksoidov, Makefile 'M' cu majuscule):

# Makefile Tiny pentru un mic program

toate:
@echo alege 'face POSIX' pentru UNIX / Cygwin sau 'face ferestre' pentru Windows

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

ferestre:
@printf „easy.c Clădire pentru ferestre.“
@printf "ENV_WINDOWS #define"> 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 // pentru INADDR_ANY
#include // pentru semnalul ()
#else
#include
# endif

int main (int argc, char ** argv)

dst sockaddr_in struct;
# ifdef ENV_POSIX
int ciorap, sid;
#else
SOCKET ciorap, sid;
WSAData WSAData;
# endif
int len ​​= sizeof (sockaddr struct);
buf char;
Portul scurt unsigned;

în cazul în care (argc<2) printf("Usage: easy.exe \ N „);
întoarce 1;
>

în cazul în care (port!) printf ( „Bad definit \ n „) !;
întoarce 2;
>

# ifdef ENV_POSIX // în pozikse am ignora semnalele, nu știi niciodată :)
semnal (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // vom verifica în versiunea pentru Windows vinsoka, nu știi niciodată :)
printf ( „Testarea dacă versiunea Winsock2 este egală sau mai mare decât 2.1.“);
if (! WSAStartup (MAKEWORD (2,1), WSAData) = 0) printf ( "a eșuat \ n!");
întoarce 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);
ciorap = soclu (AF_INET, SOCK_STREAM, 0);
printf ( „Se așteaptă o conexiune de intrare.“); fflush (stdout);
bind (ciorap, (struct sockaddr *) dst, len);
asculta (ciorap, 1);
sid = accepta (ciorap, (struct sockaddr *) dst, len);
printf ( "făcut \ nWaiting pentru datele de intrare !."); fflush (stdout);
recv (sid, buf, 1,0);
printf ( "a primit: [% 2X].", buf); fflush (stdout);
buf ++;
trimite (sid, buf, 1,0);
printf ( "terminat \ n!");

# ifdef ENV_POSIX
închidere (ciorap);
#else
WSACleanup ();
closesocket (ciorap);
# endif

Așa că am de tip „make POSIX“ pentru a compila programul în conformitate cu
UNIX'om cygwin'nuyu sau sub mediu sau „face ferestre“ pentru a nu depinde
de cygwin'a și de a folosi numai kernel32.dll, ws2_32.dll și Msvcrt.dll, care
incluse în pachetul standard al fiecăruia dintre distribuție Windows. Vă rugăm să rețineți
privind dimensiunea binară de 4096 octeți pentru Cygwin, 4608 octet pentru ferestre. )

De data aceasta, totul! Stai la scurt timp următorul articol în viitorul apropiat:

tehnologie de scanare în rețea: motor Coketny