Difference between revisions of "Упражнение 2. Достъп до периферни устройства."
Line 1: | Line 1: | ||
== Цел на упражнението == | == Цел на упражнението == | ||
+ | Подготовка и конфигуриране на развойна среда. Достъп до хардуера в Linux. | ||
+ | |||
+ | == Развойна среда == | ||
+ | === Инсталация Geany === | ||
+ | '''Ubuntu repository:''' | ||
+ | Буквално има хиляди програми за Ubuntu, които биха могли да отговорят на различните нужди на Ubuntu потребителите. Много от тези програми се съхраняват в софтуерни библиотеки и обикновено се наричат хранилища (Repository). Тези библиотеки улесняват инсталирането на нов софтуер на Ubuntu като се използва Интернет и същевременно се осигурява високо ниво на сигурност, тъй като всяка програма в хранилищата е старателно тествана и компилирана специално за всяка версия на Ubuntu. UBU001 | ||
+ | |||
+ | Софтуерът в Ubuntu хранилищата е организиран в четири отделни области в зависимост от нивото на поддръжката предлагана от Ubuntu и в зависимост лицензионната му политика: | ||
+ | Main – Софтуер, който официално се поддържа.ch | ||
+ | Restricted - Софтуер, който се поддържа, но има някакви ограничения за свободната му употреба. | ||
+ | Universe – Софтуер, който се поддържа от общността, т.е. Официално не се с | ||
+ | Multiverse – Платен софтуер. | ||
+ | |||
+ | |||
+ | '''Задача:''' Да се инсталира текстовият редактор Geany. | ||
+ | |||
+ | '' '''Упътвана:''' За инсталиране на приложение от Ubuntu Repository, отворете Ubuntu Software Center'' | ||
+ | |||
+ | [[File:UbuntuRepository.png|Ubuntu 10.10 Отваряне Софтуерен Център]] | ||
+ | |||
+ | ''Потърсете желаната програма, маркирайте я и избирате "install".'' | ||
+ | |||
+ | [[File:UbuntuInstall.png|800px|Ubuntu 10.10 Софтуерен Център]] | ||
+ | |||
+ | |||
+ | === Инсталация компилатор. === | ||
+ | |||
+ | <code><pre>:~$ sudo apt-get install build-essential</pre></code> | ||
+ | |||
+ | (във версия Ubuntu 10.10. компилаторът GCC е инсталиран по подразбиране) | ||
+ | |||
+ | За преобразуване на кодът от език на високо ниво (или сорс кодът - source code) в двоичен код (бинарни файлове - binaries, bin) на машинен език ще използваме GCC компилатор [GNU001]. *GNU Compiler Collection. GCC е един от най-разпространените компилатори поддържащ голям брой компютърни архитектури и различни програмни езици от високо ниво. | ||
+ | |||
+ | Работата на компилатора се състои в няколко стъпки и приключва със създаване на изпълним файл: предобработка, компилиране, асемблиране, свързване. | ||
+ | |||
+ | [[File:build.png|Компилиране Свързване Изграждане]] | ||
+ | |||
+ | Тези стъпки могат да се изпълняват последователно наведнъж или поетапно. | ||
+ | Най-често се изпълняват заедно първите три стъпки, така се откриват грешки само в текущия файл и също не се налага компилиране на всички файлове, а само на тези, които се променят. Свързването се извършва отделно, така освен олесняване на процеса при проекти от много файлове, по-лесно се откриват грешки от предефиниране ... | ||
+ | |||
+ | [http://www.cprogramming.com/compilingandlinking.html Свързване и Компилиране] | ||
+ | |||
+ | '''Задача''' Компилирайте с Geany и изпълнете програмата през терминал. | ||
+ | <code><pre> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int num1, num2; | ||
+ | float sum; | ||
+ | |||
+ | puts("enter number1"); | ||
+ | scanf("%d", &num1); //четене входящ информация | ||
+ | puts("enter number2"); | ||
+ | scanf("%d", &num2); //четене входящ информация | ||
+ | |||
+ | sum = num1 + num2; | ||
+ | printf("the average is %.2f \n", sum/2); //форматиран изход | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </pre></code> | ||
+ | |||
+ | '' '''Упътване:''' за да стартирате програмата през терминал, сменете текущата директория на директорията, където е записан файла и стартирайте с:'' | ||
+ | <code> | ||
+ | <pre> :~$ ./filename </pre> | ||
+ | </code> | ||
+ | |||
+ | == Standard Input Output == | ||
+ | |||
+ | === Управление от конзолата === | ||
+ | С триъгълните скоби < > може да пренасочваме стандартните I/O устройствата в терминалния прозорец. | ||
+ | |||
+ | '''Задача''' Заредете входящите данни от файл и запишете резултата във файл за програмата от предната задача. | ||
+ | '' '''Упътване''' Създайте текстов файл с две числа и стартирайте програмата по-подобен начин: | ||
+ | <code><pre>:~$ ./program < data.file > result.file</pre></code>'' | ||
+ | |||
+ | '''Задача''' Стартирайте втори терминален прозорец. Стартирайте програмата в първия и пренасочете резултатите към втория. | ||
+ | '' '''Упътване''' За да видите името на текущия терминал, изпълнете командата: | ||
+ | <code><pre>:~$ tty </pre></code>'' | ||
+ | |||
+ | |||
+ | |||
+ | '''Задача''' Създайте текстов файл и копирайте съдържанието символ по символ в нов файл. | ||
+ | |||
+ | '' '''Упътване''' Използвайте следния код'' | ||
+ | <code><pre> | ||
+ | #include <stdio.h> | ||
+ | int main( int argc, char *argv[]) | ||
+ | { | ||
+ | FILE *in, *out ; | ||
+ | char ch; | ||
+ | |||
+ | in = fopen ( "in.txt", "r" ) ; | ||
+ | if ( in == NULL ) | ||
+ | { | ||
+ | puts ( "Cannot open source file") ; | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | out = fopen ( "out.txt", "w" ) ; | ||
+ | if ( out == NULL ) | ||
+ | { | ||
+ | puts ( "Cannot open target file" ) ; | ||
+ | fclose ( out ) ; | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | while (1) | ||
+ | { | ||
+ | ch = fgetc (in) ; | ||
+ | if ( ch == EOF ) break; | ||
+ | else fputc ( ch, out ); | ||
+ | } | ||
+ | |||
+ | fclose ( in ); fclose ( out); | ||
+ | return 0; | ||
+ | } | ||
+ | </pre></code> | ||
+ | |||
+ | '''Задача''' Променете реда <code>else fputc ( ch, out ); </code>., така че файлът да се извежда в текущия терминал. | ||
+ | '' '''Упътване''' Използвайте <code> fputc(ch, stdout) / printf("%c", ch); | ||
+ | , като изпол. Използвайте Изпълнете следната | ||
+ | |||
+ | терминали | ||
+ | устройства в линукс | ||
+ | |||
+ | === Управление от програмата === | ||
+ | програма за следене на клавиатурата | ||
+ | |||
+ | |||
+ | задача: Да се направи масив да замества стойностите връща | ||
+ | |||
+ | == xxx ==sudo apt-get install gcc | ||
+ | |||
+ | 2. programa chete ot fajl | ||
+ | #include <stdio.h> | ||
+ | /* cat: | ||
+ | main(int | ||
+ | { | ||
+ | FILE | ||
+ | void | ||
+ | } | ||
+ | concatenate files, version 1 */ | ||
+ | argc, char *argv[]) | ||
+ | *fp; | ||
+ | filecopy(FILE *, FILE *) | ||
+ | if (argc == 1) /* no args; copy standard input */ | ||
+ | filecopy(stdin, stdout); | ||
+ | else | ||
+ | while(--argc > 0) | ||
+ | if ((fp = fopen(*++argv, "r")) == NULL) { | ||
+ | printf("cat: can't open %s\n, *argv); | ||
+ | return 1; | ||
+ | } else { | ||
+ | filecopy(fp, stdout); | ||
+ | fclose(fp); | ||
+ | } | ||
+ | return 0; | ||
+ | /* filecopy: copy file ifp to file ofp */ | ||
+ | void filecopy(FILE *ifp, FILE *ofp) | ||
+ | { | ||
+ | int c; | ||
+ | } | ||
+ | while ((c = getc(ifp)) != EOF) | ||
+ | putc(c, ofp); | ||
+ | The file pointers stdin and stdout are objects of type FILE *. They are constan | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 3. prenasochvane stdin stdout ... stderr | ||
+ | When a C program is started, the operating system environment is responsible for opening | ||
+ | three files and providing pointers for them. These files are the standard input, the standard | ||
+ | output, and the standard error; the corresponding file pointers are called stdin, stdout, and | ||
+ | stderr, and are declared in <stdio.h>. Normally stdin is connected to the keyboard and | ||
+ | 144 | ||
+ | stdout and stderr are connected to the screen, but stdin and stdout may be redirected to | ||
+ | files or pipes as described in Section 7.1. | ||
+ | |||
+ | |||
+ | 4. Chetene ot diska | ||
+ | |||
+ | терминали | ||
+ | устройства в линукс | ||
+ | |||
+ | === Управление от програмата === | ||
+ | програма за следене на клавиатурата | ||
+ | |||
+ | |||
+ | задача: Да се направи масив да замества стойностите връща | ||
+ | |||
+ | == xxx ==sudo apt-get install gcc | ||
+ | |||
+ | 2. programa chete ot fajl== Цел на упражнението == | ||
Подготовка и конфигуриране на развойна среда. Достъп до хардуера в Linux. | Подготовка и конфигуриране на развойна среда. Достъп до хардуера в Linux. | ||
Line 202: | Line 397: | ||
[[Category: Компютърна периферия]] | [[Category: Компютърна периферия]] | ||
+ | |||
+ | |||
+ | 3. prenasochvane stdin stdout ... stderr | ||
+ | |||
+ | 4. Chetene ot diska |
Revision as of 21:43, 16 March 2011
Contents
Цел на упражнението
Подготовка и конфигуриране на развойна среда. Достъп до хардуера в Linux.
Развойна среда
Инсталация Geany
Ubuntu repository: Буквално има хиляди програми за Ubuntu, които биха могли да отговорят на различните нужди на Ubuntu потребителите. Много от тези програми се съхраняват в софтуерни библиотеки и обикновено се наричат хранилища (Repository). Тези библиотеки улесняват инсталирането на нов софтуер на Ubuntu като се използва Интернет и същевременно се осигурява високо ниво на сигурност, тъй като всяка програма в хранилищата е старателно тествана и компилирана специално за всяка версия на Ubuntu. UBU001
Софтуерът в Ubuntu хранилищата е организиран в четири отделни области в зависимост от нивото на поддръжката предлагана от Ubuntu и в зависимост лицензионната му политика: Main – Софтуер, който официално се поддържа.ch Restricted - Софтуер, който се поддържа, но има някакви ограничения за свободната му употреба. Universe – Софтуер, който се поддържа от общността, т.е. Официално не се с Multiverse – Платен софтуер.
Задача: Да се инсталира текстовият редактор Geany.
Упътвана: За инсталиране на приложение от Ubuntu Repository, отворете Ubuntu Software Center
Потърсете желаната програма, маркирайте я и избирате "install".
Инсталация компилатор.
:~$ sudo apt-get install build-essential
(във версия Ubuntu 10.10. компилаторът GCC е инсталиран по подразбиране)
За преобразуване на кодът от език на високо ниво (или сорс кодът - source code) в двоичен код (бинарни файлове - binaries, bin) на машинен език ще използваме GCC компилатор [GNU001]. *GNU Compiler Collection. GCC е един от най-разпространените компилатори поддържащ голям брой компютърни архитектури и различни програмни езици от високо ниво.
Работата на компилатора се състои в няколко стъпки и приключва със създаване на изпълним файл: предобработка, компилиране, асемблиране, свързване.
Тези стъпки могат да се изпълняват последователно наведнъж или поетапно. Най-често се изпълняват заедно първите три стъпки, така се откриват грешки само в текущия файл и също не се налага компилиране на всички файлове, а само на тези, които се променят. Свързването се извършва отделно, така освен олесняване на процеса при проекти от много файлове, по-лесно се откриват грешки от предефиниране ...
Задача Компилирайте с Geany и изпълнете програмата през терминал.
#include <stdio.h>
int main()
{
int num1, num2;
float sum;
puts("enter number1");
scanf("%d", &num1); //четене входящ информация
puts("enter number2");
scanf("%d", &num2); //четене входящ информация
sum = num1 + num2;
printf("the average is %.2f \n", sum/2); //форматиран изход
return 0;
}
Упътване: за да стартирате програмата през терминал, сменете текущата директория на директорията, където е записан файла и стартирайте с:
:~$ ./filename
Standard Input Output
Управление от конзолата
С триъгълните скоби < > може да пренасочваме стандартните I/O устройствата в терминалния прозорец.
Задача Заредете входящите данни от файл и запишете резултата във файл за програмата от предната задача. Упътване Създайте текстов файл с две числа и стартирайте програмата по-подобен начин:
:~$ ./program < data.file > result.file
Задача Стартирайте втори терминален прозорец. Стартирайте програмата в първия и пренасочете резултатите към втория. Упътване За да видите името на текущия терминал, изпълнете командата:
:~$ tty
Задача Създайте текстов файл и копирайте съдържанието символ по символ в нов файл.
Упътване Използвайте следния код
#include <stdio.h>
int main( int argc, char *argv[])
{
FILE *in, *out ;
char ch;
in = fopen ( "in.txt", "r" ) ;
if ( in == NULL )
{
puts ( "Cannot open source file") ;
return 0;
}
out = fopen ( "out.txt", "w" ) ;
if ( out == NULL )
{
puts ( "Cannot open target file" ) ;
fclose ( out ) ;
return 0;
}
while (1)
{
ch = fgetc (in) ;
if ( ch == EOF ) break;
else fputc ( ch, out );
}
fclose ( in ); fclose ( out);
return 0;
}
Задача Променете реда else fputc ( ch, out );
., така че файлът да се извежда в текущия терминал.
Упътване Използвайте fputc(ch, stdout) / printf("%c", ch);
, като изпол. Използвайте Изпълнете следната
терминали
устройства в линукс
Управление от програмата
програма за следене на клавиатурата
задача: Да се направи масив да замества стойностите връща
== xxx ==sudo apt-get install gcc
2. programa chete ot fajl
- include <stdio.h>
/* cat:
main(int
{
FILE
void
}
concatenate files, version 1 */
argc, char *argv[])
- fp;
filecopy(FILE *, FILE *)
if (argc == 1) /* no args; copy standard input */
filecopy(stdin, stdout);
else
while(--argc > 0)
if ((fp = fopen(*++argv, "r")) == NULL) {
printf("cat: can't open %s\n, *argv);
return 1;
} else {
filecopy(fp, stdout);
fclose(fp);
}
return 0;
/* filecopy: copy file ifp to file ofp */
void filecopy(FILE *ifp, FILE *ofp)
{
int c;
}
while ((c = getc(ifp)) != EOF)
putc(c, ofp);
The file pointers stdin and stdout are objects of type FILE *. They are constan
3. prenasochvane stdin stdout ... stderr
When a C program is started, the operating system environment is responsible for opening
three files and providing pointers for them. These files are the standard input, the standard
output, and the standard error; the corresponding file pointers are called stdin, stdout, and
stderr, and are declared in <stdio.h>. Normally stdin is connected to the keyboard and
144
stdout and stderr are connected to the screen, but stdin and stdout may be redirected to
files or pipes as described in Section 7.1.
4. Chetene ot diska
терминали
устройства в линукс
Управление от програмата
програма за следене на клавиатурата
задача: Да се направи масив да замества стойностите връща
== xxx ==sudo apt-get install gcc
2. programa chete ot fajl== Цел на упражнението ==
Подготовка и конфигуриране на развойна среда. Достъп до хардуера в Linux.
Развойна среда
Инсталация Geany
Ubuntu repository:
Буквално има хиляди програми за Ubuntu, които биха могли да отговорят на различните нужди на Ubuntu потребителите. Много от тези програми се съхраняват в софтуерни библиотеки и обикновено се наричат хранилища (Repository). Тези библиотеки улесняват инсталирането на нов софтуер на Ubuntu като се използва Интернет и същевременно се осигурява високо ниво на сигурност, тъй като всяка програма в хранилищата е старателно тествана и компилирана специално за всяка версия на Ubuntu. UBU001
Софтуерът в Ubuntu хранилищата е организиран в четири отделни области в зависимост от нивото на поддръжката предлагана от Ubuntu и в зависимост лицензионната му политика:
Main – Софтуер, който официално се поддържа.ch
Restricted - Софтуер, който се поддържа, но има някакви ограничения за свободната му употреба.
Universe – Софтуер, който се поддържа от общността, т.е. Официално не се с
Multiverse – Платен софтуер.
Задача: Да се инсталира текстовият редактор Geany.
Упътвана: За инсталиране на приложение от Ubuntu Repository, отворете Ubuntu Software Center
Потърсете желаната програма, маркирайте я и избирате "install".
Инсталация компилатор.
:~$ sudo apt-get install build-essential
(във версия Ubuntu 10.10. компилаторът GCC е инсталиран по подразбиране)
За преобразуване на кодът от език на високо ниво (или сорс кодът - source code) в двоичен код (бинарни файлове - binaries, bin) на машинен език ще използваме GCC компилатор [GNU001]. *GNU Compiler Collection. GCC е един от най-разпространените компилатори поддържащ голям брой компютърни архитектури и различни програмни езици от високо ниво.
Работата на компилатора се състои в няколко стъпки и приключва със създаване на изпълним файл: предобработка, компилиране, асемблиране, свързване.
Тези стъпки могат да се изпълняват последователно наведнъж или поетапно.
Най-често се изпълняват заедно първите три стъпки, така се откриват грешки само в текущия файл и също не се налага компилиране на всички файлове, а само на тези, които се променят. Свързването се извършва отделно, така освен олесняване на процеса при проекти от много файлове, по-лесно се откриват грешки от предефиниране ...
Задача Компилирайте с Geany и изпълнете програмата през терминал.
#include <stdio.h>
int main()
{
int num1, num2;
float sum;
puts("enter number1");
scanf("%d", &num1); //четене входящ информация
puts("enter number2");
scanf("%d", &num2); //четене входящ информация
sum = num1 + num2;
printf("the average is %.2f \n", sum/2); //форматиран изход
return 0;
}
Упътване: за да стартирате програмата през терминал, сменете текущата директория на директорията, където е записан файла и стартирайте с:
:~$ ./filename
Standard Input Output
Управление от конзолата
С триъгълните скоби < > може да пренасочваме стандартните I/O устройствата в терминалния прозорец.
Задача Заредете входящите данни от файл и запишете резултата във файл за програмата от предната задача.
Упътване Създайте текстов файл с две числа и стартирайте програмата по-подобен начин:
:~$ ./program < data.file > result.file
Задача Стартирайте втори терминален прозорец. Стартирайте програмата в първия и пренасочете резултатите към втория.
Упътване За да видите името на текущия терминал, изпълнете командата:
:~$ tty
Задача Създайте текстов файл и копирайте съдържанието символ по символ в нов файл.
Упътване Използвайте следния код
#include <stdio.h>
int main( int argc, char *argv[])
{
FILE *in, *out ;
char ch;
in = fopen ( "in.txt", "r" ) ;
if ( in == NULL )
{
puts ( "Cannot open source file") ;
return 0;
}
out = fopen ( "out.txt", "w" ) ;
if ( out == NULL )
{
puts ( "Cannot open target file" ) ;
fclose ( out ) ;
return 0;
}
while (1)
{
ch = fgetc (in) ;
if ( ch == EOF ) break;
else fputc ( ch, out );
}
fclose ( in ); fclose ( out);
return 0;
}
, като изпол. Използвайте Изпълнете следната
терминали
устройства в линукс
Управление от програмата
програма за следене на клавиатурата
задача: Да се направи масив да замества стойностите връща
== xxx ==sudo apt-get install gcc
2. programa chete ot fajl
- include <stdio.h>
/* cat:
main(int
{
FILE
void
}
concatenate files, version 1 */
argc, char *argv[])
- fp;
filecopy(FILE *, FILE *)
if (argc == 1) /* no args; copy standard input */
filecopy(stdin, stdout);
else
while(--argc > 0)
if ((fp = fopen(*++argv, "r")) == NULL) {
printf("cat: can't open %s\n, *argv);
return 1;
} else {
filecopy(fp, stdout);
fclose(fp);
}
return 0;
/* filecopy: copy file ifp to file ofp */
void filecopy(FILE *ifp, FILE *ofp)
{
int c;
}
while ((c = getc(ifp)) != EOF)
putc(c, ofp);
The file pointers stdin and stdout are objects of type FILE *. They are constan
3. prenasochvane stdin stdout ... stderr
When a C program is started, the operating system environment is responsible for opening
three files and providing pointers for them. These files are the standard input, the standard
output, and the standard error; the corresponding file pointers are called stdin, stdout, and
stderr, and are declared in <stdio.h>. Normally stdin is connected to the keyboard and
144
stdout and stderr are connected to the screen, but stdin and stdout may be redirected to
files or pipes as described in Section 7.1.
4. Chetene ot diska
терминали
устройства в линукс
Управление от програмата
програма за следене на клавиатурата
задача: Да се направи масив да замества стойностите връща
== xxx ==sudo apt-get install gcc
2. programa chete ot fajl
3. prenasochvane stdin stdout ... stderr
4. Chetene ot diska
3. prenasochvane stdin stdout ... stderr
4. Chetene ot diska