#include /* Стандартные объявления ввода/вывода */ #include /* Объявления строковых функций */ #include /* Объявления стандартных функций UNIX */ #include /* Объявления управления файлами */ #include /* Объявления кодов ошибок */ #include /* Объявления управления POSIX-терминалом */ #include #include /* _SC_CLK_TCK */ #include /* SIGALRM */ #include /* не используется */ #include /* struct tms */ struct tms tms_stop, tms_start; clock_t real_stop, real_start; clock_t HZ; /* число ticks в секунде */ /* Засечь время момента старта процесса */ void hello(void){ real_start = times(&tms_start); printf("%i\n",real_start); } /* Засечь время окончания процесса */ void bye() { real_stop = times(&tms_stop); printf("%i\n",real_stop); clock_t HZ = sysconf(_SC_CLK_TCK); printf("Real time = %g seconds [%lu ticks]\n",(real_stop - real_start) / (double)HZ, real_stop - real_start); } int init_modem(int fd) //функция инициализирует модем { char bufer[255]; char *ptr; int nb; int k; //3 раза пробуем передать команду модему for (k = 0; k < 3; k ++) { //передаем команду АТ write(fd, "AT\r", sizeof("AT\r")); /* читаем из дескриптора в буфер пока не встретися перевод каретки */ ptr = bufer; while ((nb = read(fd, ptr, bufer + sizeof(bufer) - ptr - 1)) > 0) { ptr += nb; if (ptr[-1] == '\n' || ptr[-1] == '\r') break; } *ptr = '\0'; //ждем ответа "ОК" if (strncmp(bufer, "OK", 2) == 0) return (0); //просмотр буфера (буфер содержит все операции и ответы на них) printf(bufer); } return (-1); } int main() { hello(); int fd; struct termios options; // открываем порт fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); fcntl(fd, F_SETFL, 0); // получаем текущие настройки tcgetattr(fd, &options); // установка неструктурированного ввода options.c_cflag |= (CLOCAL | CREAD); options.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOE); options.c_oflag &= ~OPOST; options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 10; // устанавливаем настройки tcsetattr(fd, TCSANOW, &options); //инициализируем модем init_modem(fd); bye(); }