Что обозначает такой символ status |= ? - C (СИ)
Формулировка задачи:
Не смог найти в инете эти 2 символа, что они обозначают? если бы это было в условии, то было бы похоже на проверку (Не равно), но эта вторая строка после IF, а значит какое то действие, вот в этом коде и за одним еще вот это "status &= ~TIOCM_RTS" что значит? , status - это число, по идее оно должно записаться в порт TIOCM_RTS (Запрос на передачу), но конечно я не уверен, что прав.
if (level) status[B] |= [/B]TIOCM_RTS;
else [B]status &= ~TIOCM_RTS[/B];Решение задачи: «Что обозначает такой символ status |= ?»
textual
Листинг программы
#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main() {
int fd, serial, nom;
int flags;
nom=10;
flags=0;
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK );
usleep(nom);
ioctl(fd, TIOCMGET, &serial);
printf( "RTS изначальное %x\n", TIOCM_RTS);
usleep(nom);
ioctl(fd, TIOCMGET, &flags);//считываем порт
usleep(nom);
printf( "Флаг изначальный %x\n", flags);
if (TIOCM_RTS>0)
flags=flags-TIOCM_RTS; //удаляем RTS
else
flags=flags+2;//добавляем RTS
usleep(nom);
printf( "Флаг после исправления %x\n", flags);
ioctl(fd, TIOCMSET, &flags); //записываем результат в порт
usleep(1000);
ioctl(fd, TIOCMGET, &serial);//снова считываем и проверяем
usleep(nom);
printf( "RTS после исправления %x\n", TIOCM_RTS);
usleep(nom);
}
close(fd);
// return 0;
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Определяются переменные: fd (дескриптор файла), serial (для хранения значений порта), nom (время в миллисекундах), flags (флаги порта).
- Открывается последовательный порт /dev/ttyS0 с параметрами O_RDWR, O_NOCTTY, O_NONBLOCK.
- С помощью функции usleep() задерживается выполнение программы на номинальное время.
- С помощью функции ioctl() считываются начальные значения флагов порта, которые сохраняются в переменной serial.
- Выводится начальное значение флага RTS.
- Снова задерживается выполнение программы на номинальное время.
- С помощью функции ioctl() считываются текущие значения флагов порта, которые сохраняются в переменной flags.
- Проверяется, больше ли RTS нуля.
- Если RTS больше нуля, то его значение вычитается из flags.
- Если RTS меньше или равно нулю, то к flags добавляется 2.
- Выводится значение флага после исправления.
- С помощью функции ioctl() исправленное значение записывается обратно в порт.
- Задерживается выполнение программы на 1000 миллисекунд.
- С помощью функции ioctl() снова считывается текущее значение флагов порта, которое выводится на экран.
- Закрывается файловый дескриптор fd.
- Программа возвращает 0.