Основные утилиты и интерпретаторы ОС QNX и Linux (стандарта POSIX). Изучение основных команд пользовательского интерфейса, страница 6

.i          -           файл C, обработанный препроцессором

.C, .cc, .cpp - C++ файл

.ii         -           файл C++, обработанный препроцессором

.o         -           объектный файл

.a -       файл библиотеки

Примеры работы компилятора:

hw.c - простая программа вывода текста на консоль.

Листинг программы hw.c:

#include <stdio.h>

int main()

{

printf("Hello, World!\n");

}

Компиляция программы:

$ qcc  1_hw.c -o hw

Результат работы программы:

$ ./hw

Hello, World!

hw_tofile - простая программы вывода текста в файл

Листинг программы hw_tofile.c:

#include <stdio.h>

int main()

{

FILE *file;

file = fopen("/home/m15hgun/lab1/hello_world", "w");

fprintf(file, "Hello, World!\n");

}

Компиляция программы:

$ qcc 2_hw_tofile.c -o hw_tofile

Запуск программы:

$ ./hw_tofile

$ cat hello_world

Hello, World!

cla.c - программа, проверяющая возможность открытия файла.

Листинг программы cla.c:

#include <stdio.h>

int main(int argc, char *argv[])

{

if (argc > 1)

{

if (fopen(argv[1],"r") == NULL)

{

printf("%s: could'n open file %s\n",argv[0], argv[1]);

}

else

{

printf("%s: file %s sucessfully opened\n", argv[0], argv[1]);

}

}

else

{

printf("%s: please indicate file for open\n", argv[0]);

}

}

Компиляция программы:

$ qcc 3_cla.c -o cla

Запуск программы:

$ ./cla hello_world

./cla: file hello_world sucessfully opened

$ ./cla abc

./cla: could'n open file abc

$ ./cla

./cla: please indicate file for open

gcc

gcc - компилятор

Синтаксис:

gcc [опции|имя_файла]

gcc [опции|имя_файла]

Некоторые опции:

c - только компиляция

-o - задание файла вывода

Описание:

gcc - набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. Используется как стандартный компилятор в Unix-подобных операционных системах и некоторых проприетарных ОС. В QNX вместо gcc рекомендуется использовать компилятор qcc/QCC.

cc¸CC

cc - компилятор для С, СС - компилятор С++. В QNX cc и СС являются ссылками на gcc.

Для демонстрации возможностей конвейера были разработаны две программы:

file_name.c - программа, выводящая аргумент командной строки в stdin.

Листинг программы file_name.c:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

if (argc < 2)

{

fprintf(stderr, "%s: please indicate file for open\n", argv[0]);

exit(1);

}

else

{

printf("%s", argv[1]);

}

exit(0);

}

cla_pipe - программа, проверяющая возможность открытия файла, получает имя файла из stdin

Листинг программы cla_pipe.c

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int i = 0;

char buf[2047];

buf[0] = getc(stdin);

while( !feof(stdin) )

{

i++;

if (i < 2047)

{

buf[i] = getc(stdin);

}

else

{

break;

}

}

buf[i]='\0';

if (buf[0] != '\0')

{

if (fopen(buf,"r") == NULL)

{

printf("%s: could'n open file %s\n",argv[0], buf);

}

else

{

printf("%s: file %s sucessfully opened\n", argv[0], buf);

}

}

else

{

printf("%s: please indicate file for open\n", argv[0]);

}

exit(0);

}

Компиляция программ:

$ qcc 4_file_name.c -o file_name

$ qcc 5_cla_pipe.c -o pipe

Примеры работы программ:

$ ./file_name hello_world | ./pipe

./pipe: file hello_world sucessfully opened

$ ./file_name | ./pipe

./file_name: please indicate file for open

./pipe: please indicate file for open

$ ./file_name abc | ./pipe

./pipe: could'n open file abc

$ ./file_name hello_world || ./pipe

hello_world$

$ ./file_name hello_world && ./pipe

hello_world./pipe: please indicate file for open

Из примеров выше можно сделать следующие выводы по работе конвейеров.