QSharedMemory Class

QSharedMemory 클래스는 공유 메모리 세그먼트에 대한 액세스를 제공합니다. 더 보기...

헤더: #include <QSharedMemory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QObject

공용 타입

enum AccessMode { ReadOnly, ReadWrite }
enum SharedMemoryError { NoError, PermissionDenied, InvalidSize, KeyError, AlreadyExists, …, UnknownError }

공용 함수

QSharedMemory(const QString &key, QObject *parent = nullptr)
QSharedMemory(QObject *parent = nullptr)
QSharedMemory(const QNativeIpcKey &key, QObject *parent = nullptr)
virtual ~QSharedMemory()
bool attach(QSharedMemory::AccessMode mode = ReadWrite)
const void *constData() const
bool create(qsizetype size, QSharedMemory::AccessMode mode = ReadWrite)
void *data()
const void *data() const
bool detach()
QSharedMemory::SharedMemoryError error() const
QString errorString() const
bool isAttached() const
QString key() const
bool lock()
(since 6.6) QNativeIpcKey nativeIpcKey() const
QString nativeKey() const
void setKey(const QString &key)
(since 6.6) void setNativeKey(const QNativeIpcKey &key)
void setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs())
qsizetype size() const
bool unlock()

상세 설명

QSharedMemory는 여러 스레드와 프로세스에서 공유 메모리 세그먼트에 대한 액세스를 제공합니다. 공유 메모리 세그먼트는 QNativeIpcKey 로 표시되는 키로 식별됩니다. 키는 platformSafeKey()를 사용하여 크로스 플랫폼 방식으로 생성할 수 있습니다.

하나의 QSharedMemory 객체는 세그먼트에 create() 호출해야 하며 이 호출은 세그먼트의 크기를 지정합니다. 다른 모든 프로세스는 이미 존재해야 하는 세그먼트에 attach()를 호출하기만 하면 됩니다. 두 연산이 성공하면 애플리케이션은 data()를 호출하여 데이터에 대한 포인터를 얻을 수 있습니다.

공유 메모리를 읽거나 쓰기 전에 lock()로 공유 메모리를 잠글 수 있지만, 작업을 마친 후에는 unlock()로 잠금을 해제해야 한다는 점을 잊지 마세요.

기본적으로 QSharedMemory는 세그먼트의 마지막 인스턴스가 detached 이고 세그먼트에 대한 참조가 남아 있지 않을 때 공유 메모리 세그먼트를 자동으로 삭제합니다.

키 유형, 플랫폼별 제한 사항 및 구형 또는 비-Qt 애플리케이션과의 상호 운용성에 대한 자세한 내용은 네이티브 IPC 키 문서를 참조하십시오. 여기에는 Apple 앱 스토어를 통해 얻은 모든 앱을 포함하여 Apple 플랫폼의 샌드박스 애플리케이션에 대한 중요한 정보가 포함되어 있습니다.

또한 프로세스 간 통신QSystemSemaphore참조하십시오 .

멤버 유형 문서

enum QSharedMemory::AccessMode

상수설명
QSharedMemory::ReadOnly0공유 메모리 세그먼트는 읽기 전용입니다. 공유 메모리 세그먼트에 대한 쓰기는 허용되지 않습니다. 읽기 전용으로 생성된 공유 메모리 세그먼트에 쓰기를 시도하면 프로그램이 중단됩니다.
QSharedMemory::ReadWrite1공유 메모리 세그먼트에 대한 읽기와 쓰기는 모두 허용됩니다.

enum QSharedMemory::SharedMemoryError

상수설명
QSharedMemory::NoError0오류가 발생하지 않았습니다.
QSharedMemory::PermissionDenied1호출자에게 필요한 권한이 없기 때문에 작업이 실패했습니다.
QSharedMemory::InvalidSize2요청된 크기가 유효하지 않아서 생성 작업이 실패했습니다.
QSharedMemory::KeyError3잘못된 키 때문에 작업이 실패했습니다.
QSharedMemory::AlreadyExists4지정한 키가 있는 공유 메모리 세그먼트가 이미 존재하므로 create() 작업이 실패했습니다.
QSharedMemory::NotFound5지정한 키를 가진 공유 메모리 세그먼트를 찾을 수 없기 때문에 attach()에 실패했습니다.
QSharedMemory::LockError6create() 또는 attach()가 실패하여 오류를 반환했거나 QSystemSemaphore::acquire()에서 시스템 오류가 발생했기 때문에 공유 메모리 세그먼트에 대한 lock() 시도가 실패했습니다.
QSharedMemory::OutOfResources7요청을 채울 수 있는 메모리가 부족하여 create() 작업이 실패했습니다.
QSharedMemory::UnknownError8다른 문제가 발생했습니다.

멤버 함수 문서

QSharedMemory::QSharedMemory(const QString &key, QObject *parent = nullptr)

주어진 parent 및 레거시 키가 key 로 설정된 공유 메모리 객체를 구축합니다. 키가 설정되었으므로 create() 및 attach() 함수를 호출할 수 있습니다.

setKey(), create() 및 attach()도 참조하세요 .

QSharedMemory::QSharedMemory(QObject *parent = nullptr)

이 함수는 QSharedMemory()를 오버로드합니다.

주어진 parent 으로 공유 메모리 객체를 생성합니다. 공유 메모리 객체의 키는 생성자에 의해 설정되지 않으므로 공유 메모리 객체에는 기본 공유 메모리 세그먼트가 연결되어 있지 않습니다. 키는 create() 또는 attach()를 사용하기 전에 setNativeKey()로 설정해야 합니다.

setNativeKey()도 참조하세요 .

QSharedMemory::QSharedMemory(const QNativeIpcKey &key, QObject *parent = nullptr)

이 함수는 오버로드된 함수입니다.

주어진 parent 및 키가 key 로 설정된 공유 메모리 객체를 생성합니다. 키가 설정되었으므로 create() 및 attach() 함수를 호출할 수 있습니다.

setNativeKey(), create() 및 attach()도 참조하세요 .

[virtual noexcept] QSharedMemory::~QSharedMemory()

소멸자는 키를 지우고 공유 메모리 객체를 기본 공유 메모리 세그먼트에서 detach 로 강제 이동시킵니다. 이 공유 메모리 객체가 공유 메모리 세그먼트에 연결된 마지막 객체인 경우 detach() 작업은 공유 메모리 세그먼트를 소멸시킵니다.

detach() 및 isAttached()도 참조하세요 .

bool QSharedMemory::attach(QSharedMemory::AccessMode mode = ReadWrite)

생성자에 전달된 키 또는 setNativeKey() 호출에 의해 식별된 공유 메모리 세그먼트에 프로세스를 연결하려고 시도합니다. mode 액세스는 기본적으로 ReadWrite 입니다. ReadOnly 일 수도 있습니다. 첨부 작업이 성공하면 true 을 반환합니다. false가 반환되면 error()를 호출하여 어떤 오류가 발생했는지 확인합니다. 공유 메모리 세그먼트를 연결한 후 data()를 호출하여 공유 메모리에 대한 포인터를 얻을 수 있습니다.

isAttached(), detach() 및 create()도 참조하세요 .

const void *QSharedMemory::constData() const

공유 메모리 세그먼트가 첨부되어 있으면 그 내용에 대한 const 포인터를 반환합니다. 그렇지 않으면 null을 반환합니다. 이 함수가 반환하는 값은 detach 이 발생할 때까지 변경되지 않으므로 이 포인터를 저장하는 것이 안전합니다.

메모리 작업이 원자적이지 않은 경우 읽기 또는 쓰기 전에 lock()로 공유 메모리를 잠글 수 있지만, 작업을 마친 후에는 unlock()로 잠금을 해제하는 것을 잊지 마세요.

attach() 및 create()도 참조하세요 .

bool QSharedMemory::create(qsizetype size, QSharedMemory::AccessMode mode = ReadWrite)

생성자에 전달되거나 setNativeKey()로 설정된 키를 사용하여 size 바이트의 공유 메모리 세그먼트를 생성한 다음, 지정된 액세스 권한 mode 으로 새 공유 메모리 세그먼트에 연결하고 true 을 반환합니다. 키로 식별된 공유 메모리 세그먼트가 이미 존재하면 첨부 작업이 수행되지 않고 false 가 반환됩니다. 반환값이 false 인 경우 error()를 호출하여 어떤 오류가 발생했는지 확인합니다.

error()도 참조하세요 .

void *QSharedMemory::data()

공유 메모리 세그먼트가 첨부되어 있는 경우 해당 세그먼트의 내용에 대한 포인터를 반환합니다. 그렇지 않으면 null을 반환합니다. 이 함수가 반환하는 값은 detach 이 발생할 때까지 변경되지 않으므로 이 포인터를 저장해도 안전합니다.

메모리 작업이 원자적이지 않은 경우 읽기 또는 쓰기 전에 lock()로 공유 메모리를 잠글 수 있지만, 작업을 마친 후에는 unlock()로 잠금을 해제하는 것을 잊지 마세요.

attach()도 참조하세요 .

const void *QSharedMemory::data() const

이 함수는 data()를 오버로드합니다.

bool QSharedMemory::detach()

공유 메모리 세그먼트에서 프로세스를 분리합니다. 이 프로세스가 공유 메모리 세그먼트에 마지막으로 연결된 프로세스인 경우 공유 메모리 세그먼트는 시스템에 의해 해제됩니다(즉, 콘텐츠가 파괴됩니다). 이 함수는 공유 메모리 세그먼트를 분리하면 true 을 반환합니다. false 을 반환하면 일반적으로 세그먼트가 연결되지 않았거나 다른 프로세스에 의해 잠겨 있음을 의미합니다.

attach() 및 isAttached()도 참조하세요 .

QSharedMemory::SharedMemoryError QSharedMemory::error() const

오류가 발생했는지 여부와 발생한 경우 어떤 오류인지를 나타내는 값을 반환합니다.

errorString()도 참조하세요 .

QString QSharedMemory::errorString() const

마지막으로 발생한 오류에 대한 텍스트 설명을 반환합니다. error ()가 error value 을 반환하는 경우 이 함수를 호출하여 오류를 설명하는 텍스트 문자열을 가져옵니다.

error()도 참조하세요 .

bool QSharedMemory::isAttached() const

이 프로세스가 공유 메모리 세그먼트에 연결된 경우 true 을 반환합니다.

attach() 및 detach()도 참조하세요 .

QString QSharedMemory::key() const

이 공유 메모리에 setKey()로 할당된 레거시 키를 반환하거나, 키가 할당되지 않았거나 세그먼트가 nativeKey()를 사용하고 있는 경우 null 키를 반환합니다. 키는 Qt 애플리케이션이 공유 메모리 세그먼트를 식별하는 데 사용하는 식별자입니다.

운영 체제에서 사용하는 플랫폼별 기본 키는 nativeKey()를 호출하여 찾을 수 있습니다.

setKey() 및 setNativeKey()도 참조하세요 .

bool QSharedMemory::lock()

이 프로세스가 액세스할 수 있도록 공유 메모리 세그먼트를 잠그고 true 을 반환하는 세마포어입니다. 다른 프로세스가 세그먼트를 잠그면 이 함수는 잠금이 해제될 때까지 차단합니다. 그런 다음 잠금을 획득하고 true 을 반환합니다. 이 함수가 false 를 반환하면 create() 또는 attach()의 잘못된 반환을 무시했거나 setNativeKey()로 키를 설정했거나 알 수 없는 시스템 오류로 인해 QSystemSemaphore::acquire()가 실패했음을 의미합니다.

unlock(), data() 및 QSystemSemaphore::acquire()도 참조하세요 .

[since 6.6] QNativeIpcKey QSharedMemory::nativeIpcKey() const

이 공유 메모리 객체의 키 타입을 반환합니다. 키 유형은 운영 체제에서 공유 메모리 세그먼트를 식별하는 데 사용하는 식별자로 nativeKey()를 보완합니다.

네이티브 키를 사용하여 Qt에서 생성되지 않은 공유 메모리 세그먼트에 액세스하거나 Qt가 아닌 어플리케이션에 공유 메모리 액세스 권한을 부여할 수 있습니다. 자세한 내용은 네이티브 IPC 키를 참조하십시오.

이 기능은 Qt 6.6에 도입되었습니다.

nativeKey() 및 setNativeKey()도 참조하십시오 .

QString QSharedMemory::nativeKey() const

이 공유 메모리 객체에 대한 플랫폼별 기본 키를 반환합니다. 네이티브 키는 운영 체제에서 공유 메모리 세그먼트를 식별하는 데 사용하는 식별자입니다.

네이티브 키를 사용하여 Qt에서 생성되지 않은 공유 메모리 세그먼트에 액세스하거나 Qt가 아닌 응용 프로그램에 공유 메모리 액세스 권한을 부여할 수 있습니다. 자세한 내용은 네이티브 IPC 키를 참조하십시오.

setNativeKey() 및 nativeIpcKey()도 참조하십시오 .

void QSharedMemory::setKey(const QString &key)

이 함수는 오버로드된 함수입니다.

이 공유 메모리 객체에 대해 레거시 key 를 설정합니다. key 이 현재 키와 같으면 함수는 아무 작업도 수행하지 않고 반환합니다. 그렇지 않으면 공유 메모리 객체가 기본 공유 메모리 세그먼트에 연결되어 있는 경우 새 키를 설정하기 전에 해당 세그먼트에서 detach 을 반환합니다. 이 함수는 attach()를 수행하지 않습니다.

key()를 호출하여 레거시 키를 검색할 수 있습니다. 이 함수는 대부분

shm.setNativeKey(QSharedMemory::legacyNativeKey(key));

key()를 사용하여 레거시 키를 가져올 수 있다는 점을 제외하면 거의 동일합니다.

key(), nativeKey() 및 isAttached()도 참조하세요 .

[since 6.6] void QSharedMemory::setNativeKey(const QNativeIpcKey &key)

이 공유 메모리 객체에 대한 플랫폼별 기본 키( key )를 설정합니다. key 이 현재 기본 키와 같으면 함수는 아무 작업도 수행하지 않고 반환합니다. 그렇지 않으면 공유 메모리 객체가 기본 공유 메모리 세그먼트에 연결되어 있는 경우 새 키를 설정하기 전에 해당 세그먼트에서 detach 을 반환합니다. 이 함수는 attach()를 수행하지 않습니다.

이 함수는 네이티브 키가 다른 프로세스에서 공유된 경우에 유용합니다. 자세한 내용은 네이티브 IPC 키를 참조하세요.

휴대용 기본 키는 platformSafeKey()를 사용하여 얻을 수 있습니다.

nativeKey()를 호출하여 네이티브 키를 검색할 수 있습니다.

이 함수는 Qt 6.6에 도입되었습니다.

nativeKey(), nativeIpcKey() 및 isAttached()도 참조하십시오 .

void QSharedMemory::setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs())

type 형의 공유 메모리 객체에 대해 플랫폼별 네이티브, key 를 설정합니다 (이 형 파라미터는 Qt 6.6부터 사용할 수 있습니다). key 가 현재 네이티브 키와 같으면, 함수는 아무 작업도 하지 않고 반환합니다. 그렇지 않으면, 공유 메모리 객체가 기본 공유 메모리 세그먼트에 연결되어 있으면 새 키를 설정하기 전에 이 세그먼트에서 detach 을 반환합니다. 이 함수는 attach()를 수행하지 않습니다.

이 함수는 네이티브 키가 다른 프로세스에서 공유된 경우 유용하지만, 애플리케이션에서 키 유형이 다른 프로세스에서 예상하는 것과 일치하는지 확인해야 합니다. 자세한 내용은 네이티브 IPC 키를 참조하세요.

휴대용 네이티브 키는 platformSafeKey()를 사용하여 얻을 수 있습니다.

nativeKey()를 호출하여 네이티브 키를 검색할 수 있습니다.

nativeKey(), nativeIpcKey() 및 isAttached()도 참조하세요 .

qsizetype QSharedMemory::size() const

연결된 공유 메모리 세그먼트의 크기를 반환합니다. 첨부된 공유 메모리 세그먼트가 없으면 0이 반환됩니다.

참고: 세그먼트의 크기는 create()에 전달된 요청된 크기보다 클 수 있습니다.

create() 및 attach()도 참조하세요 .

bool QSharedMemory::unlock()

공유 메모리 세그먼트의 잠금을 해제하고 현재 이 프로세스가 잠금을 보유하고 있는 경우 true 를 반환합니다. 세그먼트가 잠겨 있지 않거나 다른 프로세스가 잠금을 보유하고 있으면 아무 일도 일어나지 않고 false가 반환됩니다.

lock()도 참조하세요 .

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.