unshare() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論區     關於 TP  

unshare() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

unshare - 取消程序執行上下文的部分關聯

概要

#include <sched.h> 

int unshare(int flags);

描述

unshare() 允許程序取消其當前與其他程序共享的執行上下文的部分關聯。例如名稱空間之類的執行上下文的一部分在使用 fork(2) 或 vfork(2) 建立新程序時隱式共享,而其他部分,例如虛擬記憶體,則可能在使用 clone(2) 建立程序時透過顯式請求共享。

unshare() 的主要用途是允許程序控制其共享執行上下文,而無需建立新程序。

flags 引數是一個位掩碼,用於指定應取消共享執行上下文的哪些部分。此引數透過將以下常量中的零個或多個常量進行 OR 運算來指定

標籤描述
CLONE_FILES 反轉 clone(2) CLONE_FILES 標誌的效果。取消共享檔案描述符表,以便呼叫程序不再與其任何其他程序共享其檔案描述符。
CLONE_FS 反轉 clone(2) CLONE_FS 標誌的效果。取消共享檔案系統屬性,以便呼叫程序不再與其任何其他程序共享其根目錄、當前目錄或 umask 屬性。chroot(2)、chdir(2) 或 umask(2)
CLONE_NEWNS 此標誌與 clone(2) CLONE_NEWNS 標誌具有相同的效果。取消共享名稱空間,以便呼叫程序擁有其名稱空間的私有副本,該副本不與任何其他程序共享。指定此標誌也會自動暗示 CLONE_FS

如果 flags 指定為零,則 unshare() 為無操作;不會對呼叫程序的執行上下文進行任何更改。

返回值

成功時返回零。失敗時返回 -1,並設定 errno 以指示錯誤。

錯誤

標籤描述
EPERM flags 指定了 CLONE_NEWNS,但呼叫程序沒有特權(沒有 CAP_SYS_ADMIN 功能)。
ENOMEM 無法分配足夠的記憶體來複制需要取消共享的呼叫者上下文的各個部分。
EINVAL flags 中指定了無效位。

符合標準

unshare() 系統呼叫是 Linux 特定的。

備註

unshare() 系統呼叫是在 Linux 核心 2.6.16 中新增的。

並非所有在使用 clone(2) 建立新程序時可以共享的程序屬性都可以使用 unshare() 取消共享。特別是,在核心 2.6.16 中,unshare() 沒有實現反轉 CLONE_SIGHANDCLONE_SYSVSEMCLONE_THREADCLONE_VM 效果的標誌。如果需要,將來可能會新增此類功能。

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.