Примери за малки програми
[Sygwin: среда за мултиплатформена програмиране]
Cygwin: какво е това?
Cygwin - е съкращение от "Лебед", група от разработчиците на свободен
Софтуер в рамките на проекта "RedHat" и "Windows", цялата ни любима операционна
система. Бързам да разсее много популярна гледна точка, че Cygwin - това
UNIX емулатор на Windows: това не е така! Cygwin - това е само мощен, високо развита
и най-важното, безплатен набор от софтуер за пренос (пренасяне) на
Unix-софтуер за Windows и кръстосано компилация (създаване на двоичен един
платформа под друга) UNIX'ovgo софтуера. За мен лично, на Cygwin, на първо място,
Той е мощен GCC компилатор с полиран под Windows Хедър и libami.
Cygwin сега става доста популярни: много производители
безплатна поддръжка на софтуер "--target = Cygwin" в конфигурационния на UNIX
програми, ползата не е толкова отнема много време. И Cygwin, от своя страна, се разширява
съвместимост на UNIX, поддържаща не само POSIX, но други, по-
тясно специфични стандарти UNIX-базирани системи.
Cygwin: къде да търсите?
Cygwin: какво и как да се инсталира?
Отидете на някой от огледалата за cygwin'a. Вие ще видите три основни
директорията: вноската, най-новите и Xfree. Първо - тази програма пренесли
Самата Cygwin Cygnus'om и изисква само достъп до основните за
библиотека, cygwin1.dll. Трето - това е пренасяне на околната среда на X-сървър под Cygwin.
Ние ще трябва съдържанието на втората директория, последна.
Ако искате да програмирате в cygwin'e, а след това малко или много
удобна работа, която е необходима последната версия на пепел пакети, Autoconf,
Automake, Баш, Binutils, bzip2, Cygwin, раз, fileutils, findutils, ССЗ,
gperf, Гроф, GZIP, по-малко, за вход, m4, правят мъж, MinGW, MinGW-време на работа, ncurses,
кръпка, СЕД, SH-UTILS, катран, w32api, Zlib и, естествено, setup.exe. Ако
маниак, можете да изпомпва източника на тези пакети.
По подразбиране, Cygwin се качва на исканата указателя в рамките на
права, които го определят. Инсталиране cygwin'a създадете вашия работен плот
икона и кликнете върху него, ще се озовете в един много bash'e, по мое мнение, доста
конфигурирани цветове.
cygwin1.dll: какво е това?
Библиотеката се фокусира cygwin1.dll цялата POSIX, който емулира
Cygwin, както и някои много важна функция cygwin'a. Грубо казано,
cygwin1.dll - това е главната библиотека cygwin'a неговото ядро. Да не забравяме
cygwin1.dll копирате файла в произволна директория, към който сте се регистрирали
"PATH = ', например, в"% Windir% ", за да cygwin'nye програма работи
не само в рамките на Cygwin околната среда.
Ако някога сте писмено или компилиран под UNIX програмата, не е нужно
Вие ще изпитате никакви трудности в работата с Cygwin. Само не забравяйте, че
cygwin'ny ССЗ не може да подкрепи някои от опциите, които се използват
в UNIX'e, въпреки че броят на такива недоразумения е сведена до минимум. На моята възраст
например, такива проблеми не възникват. Във всеки случай, ако има такива
проблем, ние всички знаем, заедно най-добрият начин за решаването им: "човек ССЗ. )))
Ако все пак не всякога да се занимава с програмиране UNIX
и сте свикнали да натиснете
Не трябва да се разстрои. Опитайте "човек ССЗ" в bash'e cygwin'a: доста
достоен и завладяващ четене.
Аз няма да бъдат оригинални, така че ние ще започнем, както винаги и навсякъде, с
О 'Здравей, свят! " на конзолата. Така че, hello.c:
ФОРМАТ ( "Hello World \ н!");
връщане 0;
ССЗ -s hello.c -o hello.exe
и погледнете в двоичен. 3072 байта двоичен код, PE формат, преносим
изпълним, изтегляне DLL:
на cygwin1.dll, където hello.exe отнема нашата ФОРМАТ () и други функции,
което ни nakompiliroval ССЗ;
kernel32.dll, където hello.exe отнема GetModuleHandleA.
пирен
inkludnoy директория и да UNIX, и cygwin'e.
В cygwin'nom ССЗ има една много хубава опция, която по някаква причина,
не са документирани в човек-файл, "-mno-Cygwin". Ние съставят нашата програма
С тази опция:
ССЗ -mno-Cygwin -s hello.c -о hello.exe
и погледнете в двоичния код: Отново, 3072 байта двоичен код, но ни
програма вече не се нуждае cygwin1.dll! вместо това, той използва
Msvcrt.dll, където ние намерите желания функция ФОРМАТ.
Ако yuzaem опция "-mno-Cygwin", Cygwin хвърля gcc'shny предпроцесорни
в директорията / ЮЕсАр / включват / MinGW и съответно ССЗ компилира
тя е от тази директория.
Силно препоръчваме да се разходите из съдържанието на дадена директория
/ ЮЕсАр / включват, за да се разбере какво е това, което. Мисля, че ще оцените
съдържанието на директорията / ЮЕсАр / включват / SYS и / ЮЕсАр / включват / w32api.
---[Makefile (за neyuniksoidov, "М" Makefile с главни букви):
# Tiny Makefile за една малка програма
всички:
@echo Pick 'направи POSIX "за UNIX / Cygwin или" направи прозорци "за Windows
POSIX:
@printf "Сграда easy.c за POSIX."
@printf "#define ENV_POSIX"> plateform.h
@gcc -s easy.c -o easy.exe
@echo ОК!
прозорци:
@printf "Сграда easy.c за прозорци."
@printf "#define ENV_WINDOWS"> plateform.h
@gcc -mno-Cygwin -s easy.c -lws2_32 -о easy.exe
@echo ОК!
#include "plateform.h"
#include
#ifdef ENV_POSIX
#include
#include
#include
#include
#else
#include
# endif
Int основна (междинно argc, овъгляване ** argv)
Struct sockaddr_in DST;
#ifdef ENV_POSIX
Int чорап, Sid;
#else
КОНТАКТ чорап, Sid;
WSADATA wsaData;
# endif
Int дъл = sizeof (структура sockaddr);
овъгляване Buf;
неподписан кратко порт;
ако (argc<2) printf("Usage: easy.exe
върне 1;
>
ако (порт!) ФОРМАТ ( "Bad
върне 2;
>
#ifdef ENV_POSIX // в pozikse пренебрегваме сигналите, никога не се знае :)
сигнал (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // проверяваме в Windows vinsoka версия, никога не се знае :)
ФОРМАТ ( "Изпитване ако версията Winsock2 е равна или по-висока от 2.1.");
ако (! WSAStartup (MAKEWORD (2,1), wsaData) = 0) ФОРМАТ ( "не успя \ н!");
върне 1;
>
ФОРМАТ ( "ОК \ н!");
fflush (стандартния изход);
# endif
dst.sin_family = AF_INET;
dst.sin_addr.s_addr = htonl (INADDR_ANY);
dst.sin_port = htons (порт);
чорап = гнездо (AF_INET, SOCK_STREAM, 0);
ФОРМАТ ( "В очакване на входяща връзка."); fflush (стандартния изход);
свързват (чорап, (структура sockaddr *) DST, лен);
слушат (чорап, 1);
Sid = приема (чорап, (структура sockaddr *) DST, лен);
ФОРМАТ ( "направи \ nWaiting за входящи данни !."); fflush (стандартния изход);
Получ (SID, Buf, 1,0);
ФОРМАТ ( "получи: [% 2X].", Buf); fflush (стандартния изход);
Buf ++;
изпратите (SID, Buf, 1,0);
ФОРМАТ ( "направи \ н!");
#ifdef ENV_POSIX
близост (чорап);
#else
WSACleanup ();
closesocket (чорап);
# endif
Така че ние тип "направи POSIX" за съставяне на програма, по
UNIX'om cygwin'nuyu или под средно или "направи прозорци", за да не зависи
от cygwin'a и използвайте само kernel32.dll, ws2_32.dll и Msvcrt.dll, което
включени в стандартния комплект на всеки от разпределението на Windows. Моля, обърнете внимание
двоична размер на 4096 байта за Cygwin, 4608 байт за прозорци. )
Този път всичко! Чакай малко следната статия в близко бъдеще:
сканираща технология мрежа: Coketny двигател