Русские Блоги
Открыть один и тот же файл несколько раз с помощью O_APPEND
1. Несколько раз откройте один и тот же файл для чтения
(1) Откройте один и тот же файл дважды в процессе, а затем прочитайте их отдельно, чтобы увидеть, что происходит
(2) Результатом является не более чем два случая: один — это fd1 и fd2 — чтение отдельно, второй — непрерывное чтение. После экспериментальной проверки доказано, что fd1 и fd2 читаются отдельно.
(3) Прочтите инструкции по отдельности: когда мы используем дважды, чтобы открыть один и тот же файл, файловые указатели, соответствующие fd1 и fd2, являются двумя отдельными указателями. Указатель файла включен в таблицу управления файлами динамического файла, поэтому можно видеть, что разные fds в процессе системы linux соответствуют различным независимым таблицам управления файлами.
2. Повторно открыть один и тот же файл для записи
(1) Два файла в одном и том же процессе открывают один и тот же файл и получают fd1 и fd2. Затем посмотрите, пишут ли они отдельно или продолжают запись?
КАК ЗАПУСТИТЬ РОБЛОКС С Двух АККАУНТОВ НА ОДНОМ КОМПЬЮТЕРЕ
(2) При нормальных обстоятельствах нам иногда нужно писать отдельно, а иногда нам нужно продолжать писать, поэтому эти два типа не являются хорошими или плохими. Ключ зависит от потребностей пользователя
(3) По умолчанию должно быть: написать отдельно (проверено экспериментально)
3. Добавьте O_APPEND для решения проблемы покрытия
(1) Иногда мы хотим продолжать писать вместо того, чтобы писать отдельно? Способ заключается в добавлении логотипа O_APPEND при открытии
4. Принцип реализации O_APPEND и его атомарное эксплуатационное описание
(1) Почему O_APPEND может изменить отдельную запись на непрерывную запись? Ключевым моментом является указатель файла. Внутренний принцип записи по отдельности заключается в том, что два файла имеют разные файловые указатели и учитывают только смещение друг друга. Но флаг O_APPEND позволяет функциям записи и чтения выполнять еще одну задачу: перемещать свои собственные указатели файлов, а также перемещать указатели файлов других людей. (То есть, даже если O_APPEND добавлен, fd1 и fd2 по-прежнему имеют независимый файловый указатель, но два файловых указателя связаны, и один уведомит другой, чтобы он следовал при его перемещении.)
(2) Влияние O_APPEND на указатель файла, чтение и запись файла является атомарным.
(3) Смысл атомарной операции заключается в том, что после начала всей операции она не прерывается, и необходимо запланировать выполнение других кодов до окончания операции. Это называется атомарной операцией. Каждая операционная система имеет несколько механизмов для реализации атомарных операций, чтобы обеспечить выполнение задач, требующих атомарных операций.
#include #include #include #include #include #include #include int main(int argc,char *argv[]) < int fd1 = 1,fd2 = 1; char buf[100] = ; char wbuf[20] = ; int ret = -1; fd1 = open(«a.txt»,O_RDWR | O_TRUNC | O_CREAT | O_APPEND,0666); fd2 = open(«a.txt»,O_RDWR | O_TRUNC | O_CREAT | O_APPEND,0666); if(-1 == fd1 || -1 == fd2) //fd < 0 < printf(«File Open Error.n»); perror(«open»); _exit(-1); >#if 1 while(1) < ret = write(fd1,»ab»,2); if(ret < 0) < printf(«Write Error.n»); perror(«write»); _exit(-1); >else < printf(«write %d byte.n»,ret); printf(«write context is [%s]n»,wbuf); >sleep(1); ret = write(fd2,»cd»,2); if(ret < 0) < printf(«Write Error.n»); perror(«write»); _exit(-1); >else < printf(«write %d byte.n»,ret); printf(«write context is [%s]n»,wbuf); >> #endif #if 0 while(1) < memset(buf,0,sizeof(buf)); ret = read(fd1,buf,30); if(-1 == ret) < printf(«Read Error.n»); perror(«read»); _exit(-1); >else < printf(«read %d byte.n»,ret); printf(«The fd1 context is [%s]n»,buf); >sleep(1); memset(buf,0,sizeof(buf)); ret = read(fd2,buf,30); if(-1 == ret) < printf(«Read Error.n»); perror(«read»); _exit(-1); >else < printf(«read %d byte.n»,ret); printf(«The fd2 context is [%s]n»,buf); >> #endif close(fd1); close(fd2); return 0; >
Источник: russianblogs.com
как запустить 2 окна или клиента игры.
Есть ли возможность запустить второй раз ту же программу в Qt?
Я создаю простую онлайн-игру в Qt Creator. Я создал серверный проект, который анализирует полученные данные и принимает решения. Также я создал проект игрока, который отправляет запросы на сервер для разрешения на перемещение, съемку и т.д. Проект игрока должен быть универсальным для Игроков 1 и Игрока 2. Есть ли возможность запуска проекта игрока дважды в Qt Creator? Мне нужно это, чтобы проверить, как работает сервер и игрок, когда подключается второй игрок.
proton 17 май 2016, в 21:37
Поделиться
Вы пытались запустить исполняемый файл извне QtCreator?
Paulo1205 17 май 2016, в 18:57
Поделиться:
2 ответа
Лучший ответ
Откройте 3 Qt Creators, 1 для сервера 2 для игроков, а затем запустите все из них. Я сделал многопользовательскую игру server-client в Qt, и именно так я ее протестировал. Для каждого клиента (игрока) откройте Qt Creator.
EDIT: вы также можете создавать версии релизов и запускать их, но вы тратите много времени на создание версии выпуска каждый раз, когда хотите отлаживать.
kemis 17 май 2016, в 17:44
Поделиться
Я думал, что может быть один открытый Qt Creator одновременно. Спасибо, это работает, с одной проблемой. Во втором Qt Creator у меня есть что-то вроде: «Не могу загрузить отладчик общается». Мне нужно это общение, есть ли способ получить общение от qDebug на обоих создателях Qt?
proton 17 май 2016, в 19:05
Шутки в сторону? Вы не могли придумать какой-либо другой способ запуска приложения, кроме запуска нескольких экземпляров вашей IDE? — правда ? Вы рассматривали возможность запуска приложения несколько раз из оболочки? Или вы можете отредактировать свою конфигурацию «Run» в Creator, чтобы запустить приложение несколько раз . Есть так много лучших способов . Это решение просто . Я не знаю, что сказать .. Взломать (в лучшем случае). ..
Jesper Juhl 17 май 2016, в 19:07
Для проблемы qDebug stackoverflow.com/questions/14379325/…
kemis 17 май 2016, в 19:08
kemis 17 май 2016, в 19:20
Я хотел быстрое решение, и я получил его. Я считаю, что есть более сложные решения, но это тоже решает мою проблему.
proton 17 май 2016, в 19:24
Jesper Juhl 17 май 2016, в 19:26
Показать ещё 4 комментария
Я использую Qt Creator 4.3.1: вы можете это сделать в » Инструменты» > » Параметры» > » Создать и запустить». На вкладке » Общие » установите » Остановить приложения до построения: » до » Нет «)
Camilo 04 июль 2017, в 11:02
Поделиться
Ещё вопросы
- 1 Многопоточность в opennetcf.orm (как использовать SqlCeDataStore)
- 0 Получить все с отличным идентификатором пользователя и порядком по общему счету
- 1 Какой фильтр для кодирования PNG чересстрочной с использованием компонентов обработки изображений Windows (WIC) с оболочкой C #?
- 1 динамические события Google Analytics на основе события диспетчера тегов
- 0 removeAttr не удаляет отключенный атрибут в Firefox
- 1 Реализовать функцию Sliding Drawer как
- 0 Изменить аватар пользователя из аватар изображения доступны на моем сайте?
- 0 проверка во время компиляции с помощью const char * (nullptr)
- 1 Как читать PDF-файлы на азиатских языках (китайский, японский, тайский и т. Д.) И хранить их в виде строки в python
- 1 Удаление строки запроса из ServletRequest после того, как она достигает сервлета / фильтра
- 0 C ++: При удалении динамически размещенного класса удаляются ли частные члены, которых нет в куче?
- 1 Строковый параметр слишком длинный. извлечение данных из базы данных в шаблон слова
- 0 JavaScript: список не обновляется после всплывающего поиска
- 1 Передача аргументов в setTimeout: один метод не работает (JS)
- 1 Как получить заявки для текущего пользователя в SharePoint 2013
- 0 События во время выполнения на основе манифеста
- 0 MySQL: транзакции PDO не работают должным образом
- 0 Как добавить HTML вокруг строки?
- 1 Счетчик значений по группе не показывает счетчик значений NULL / NA в пандах
- 0 Параметр выпадающего не выбран — angularjs
- 0 Ошибки отображаются, когда я запускаю на своем локальном хосте
- 0 isset не работает при отправке формы (на самом деле проблема с БД)
- 0 AngularJS: При каких конкретных обстоятельствах обещание, возвращаемое $ http, отклоняется?
- 0 Перевод с C / C ++ на C #
- 0 Оберните кучу вариантов внутри стола в Symfony / Twig
- 0 sqlsrv драйвер для Windows PHP PDO SQL сервер
- 0 PHP сравнивает массивы и заменяет значения
- 1 c # недопустимый символ в пути к файлу
- 0 отправить выбранные данные в таблицу php
- 0 Как я могу разработать мобильное веб-приложение с использованием Visual Studio 2012 и jquery с asp.net MVC
- 1 Я не могу просто сослаться на ребенка под идентификатором пользователя из базы данных Firebase
- 0 3 столбца делятся не по горизонтали
- 1 JS вызвать конструктор базового класса
- 0 Динамический CSS с AnguarJS / Ionic Framework
- 0 По умолчанию работает только для 8 и 9. После этого он использует первое число и обрабатывает его как 1,2,3
- 1 Retrofit2-AWS S3 Multipart image Проблема с повреждением файла
- 1 Как остановить приращение индекса, используя итерацию Array.map на основе определенных условий внутри цикла?
- 1 Членство не использует провайдера по умолчанию
- 1 Круглый поплавок до ближайшего 2/100
- 1 Можно ли иметь несколько строк в одной позиции массива?
- 0 Выполнить код, когда отображается частичное представление
- 1 Невозможно отправить HTTP-запросы по износу Bluetooth
- 1 Хранение содержимого таблиц из одного класса в другой класс в Java
- 0 PHP многомерный массив
- 1 java.lang.NullPointerException в сервлете
- 1 Как создать собственный стиль для Android SearchView?
- 0 Нужна регулярная фильтрация с помощью угловой таблицы
- 1 Регулярное выражение Javascript: соответствует адресу (номер + название улицы)
- 0 Мои значки не будут отображаться в моем нижнем колонтитуле
- 0 Невозможно получить объектную модель в Angular
Источник: overcoder.net