File indexing completed on 2026-09-14 09:24:27
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOT_TUnixSystem
0013 #define ROOT_TUnixSystem
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include "TSystem.h"
0025 #include "TSysEvtHandler.h"
0026 #include "TTimer.h"
0027 #include <string>
0028
0029 typedef void (*SigHandler_t)(ESignals);
0030
0031
0032 class TUnixSystem : public TSystem {
0033
0034 private:
0035 void FillWithCwd(char *cwd) const;
0036
0037 protected:
0038 const char *GetLinkedLibraries() override;
0039
0040
0041 static int UnixMakedir(const char *name);
0042 static void *UnixOpendir(const char *name);
0043 static const char *UnixGetdirentry(void *dir);
0044 static const char *UnixHomedirectory(const char *user = nullptr);
0045 static const char *UnixHomedirectory(const char *user, char *path, char *mydir);
0046 static Long64_t UnixNow();
0047 static int UnixWaitchild();
0048 static int UnixSetitimer(Long_t ms);
0049 static int UnixSelect(Int_t nfds, TFdSet *readready, TFdSet *writeready,
0050 Long_t timeout);
0051 static void UnixSignal(ESignals sig, SigHandler_t h);
0052 static const char *UnixSigname(ESignals sig);
0053 static void UnixSigAlarmInterruptsSyscalls(Bool_t set);
0054 static void UnixResetSignal(ESignals sig);
0055 static void UnixResetSignals();
0056 static void UnixIgnoreSignal(ESignals sig, Bool_t ignore);
0057 static int UnixFilestat(const char *path, FileStat_t &buf);
0058 static int UnixFSstat(const char *path, Long_t *id, Long_t *bsize,
0059 Long_t *blocks, Long_t *bfree);
0060 static int UnixTcpConnect(const char *hostname, int port, int tcpwindowsize);
0061 static int UnixUdpConnect(const char *hostname, int port);
0062 static int UnixUnixConnect(int port);
0063 static int UnixUnixConnect(const char *path);
0064 static int UnixTcpService(int port, Bool_t reuse, int backlog,
0065 int tcpwindowsize, ESocketBindOption socketBindOption);
0066 static int UnixUdpService(int port, int backlog, ESocketBindOption socketBindOption);
0067 static int UnixUnixService(int port, int backlog);
0068 static int UnixUnixService(const char *sockpath, int backlog);
0069 static int UnixRecv(int sock, void *buf, int len, int flag);
0070 static int UnixSend(int sock, const void *buf, int len, int flag);
0071
0072 public:
0073 TUnixSystem();
0074 virtual ~TUnixSystem();
0075
0076
0077 Bool_t Init() override;
0078 void SetProgname(const char *name) override;
0079 void SetDisplay() override;
0080 const char *GetError() override;
0081 const char *HostName() override;
0082
0083
0084 void DispatchOneEvent(Bool_t pendingOnly = kFALSE) override;
0085 Int_t Select(TList *active, Long_t timeout) override;
0086 Int_t Select(TFileHandler *fh, Long_t timeout) override;
0087
0088
0089 void CheckChilds();
0090 Bool_t CheckSignals(Bool_t sync);
0091 Bool_t CheckDescriptors();
0092 void DispatchSignals(ESignals sig);
0093 void AddSignalHandler(TSignalHandler *sh) override;
0094 TSignalHandler *RemoveSignalHandler(TSignalHandler *sh) override;
0095 void ResetSignal(ESignals sig, Bool_t reset = kTRUE) override;
0096 void ResetSignals() override;
0097 void IgnoreSignal(ESignals sig, Bool_t ignore = kTRUE) override;
0098 void SigAlarmInterruptsSyscalls(Bool_t set) override;
0099 void AddFileHandler(TFileHandler *fh) override;
0100 TFileHandler *RemoveFileHandler(TFileHandler *fh) override;
0101
0102
0103 Int_t GetFPEMask() override;
0104 Int_t SetFPEMask(Int_t mask = kDefaultMask) override;
0105
0106
0107 TTime Now() override;
0108 void AddTimer(TTimer *ti) override;
0109 TTimer *RemoveTimer(TTimer *ti) override;
0110 void ResetTimer(TTimer *ti) override;
0111 Bool_t DispatchTimers(Bool_t mode);
0112 void Sleep(UInt_t milliSec) override;
0113
0114
0115 Int_t Exec(const char *shellcmd) override;
0116 FILE *OpenPipe(const char *shellcmd, const char *mode) override;
0117 int ClosePipe(FILE *pipe) override;
0118 int GetPid() override;
0119 void StackTrace() override;
0120
0121 [[ noreturn ]] void Exit (int code, Bool_t mode = kTRUE) override;
0122 [[ noreturn ]] void Abort (int code = 0) override;
0123
0124
0125 int MakeDirectory(const char *name) override;
0126 void *OpenDirectory(const char *name) override;
0127 void FreeDirectory(void *dirp) override;
0128 const char *GetDirEntry(void *dirp) override;
0129 Bool_t ChangeDirectory(const char *path) override;
0130 const char *WorkingDirectory() override;
0131 std::string GetWorkingDirectory() const override;
0132 const char *HomeDirectory(const char *userName = nullptr) override;
0133 std::string GetHomeDirectory(const char *userName = nullptr) const override;
0134 const char *TempDirectory() const override;
0135 FILE *TempFileName(TString &base, const char *dir = nullptr, const char *suffix = nullptr) override;
0136
0137
0138 const char *PrependPathName(const char *dir, TString& name) override;
0139 Bool_t ExpandPathName(TString &patbuf) override;
0140 char *ExpandPathName(const char *path) override;
0141 Bool_t AccessPathName(const char *path, EAccessMode mode = kFileExists) override;
0142 Bool_t IsPathLocal(const char *path) override;
0143 int CopyFile(const char *from, const char *to, Bool_t overwrite = kFALSE) override;
0144 int Rename(const char *from, const char *to) override;
0145 int Link(const char *from, const char *to) override;
0146 int Symlink(const char *from, const char *to) override;
0147 int Unlink(const char *name) override;
0148 int GetPathInfo(const char *path, FileStat_t &buf) override;
0149 int GetFsInfo(const char *path, Long_t *id, Long_t *bsize,
0150 Long_t *blocks, Long_t *bfree) override;
0151 int Chmod(const char *file, UInt_t mode) override;
0152 int Umask(Int_t mask) override;
0153 int Utime(const char *file, Long_t modtime, Long_t actime) override;
0154 const char *FindFile(const char *search, TString& file, EAccessMode mode = kFileExists) override;
0155
0156
0157 Int_t GetUid(const char *user = nullptr) override;
0158 Int_t GetGid(const char *group = nullptr) override;
0159 Int_t GetEffectiveUid() override;
0160 Int_t GetEffectiveGid() override;
0161 UserGroup_t *GetUserInfo(Int_t uid) override;
0162 UserGroup_t *GetUserInfo(const char *user = nullptr) override;
0163 UserGroup_t *GetGroupInfo(Int_t gid) override;
0164 UserGroup_t *GetGroupInfo(const char *group = nullptr) override;
0165
0166
0167 const char *Getenv(const char *name) override;
0168 void Setenv(const char *name, const char *value) override;
0169 void Unsetenv(const char *name) override;
0170
0171
0172 void Openlog(const char *name, Int_t options, ELogFacility facility) override;
0173 void Syslog(ELogLevel level, const char *mess) override;
0174 void Closelog() override;
0175
0176
0177 Int_t RedirectOutput(const char *name, const char *mode = "a",
0178 RedirectHandle_t *h = nullptr) override;
0179
0180
0181 void AddDynamicPath(const char *lib) override;
0182 const char *GetDynamicPath() override;
0183 void SetDynamicPath(const char *lib) override;
0184 const char *FindDynamicLibrary(TString &lib, Bool_t quiet = kFALSE) override;
0185 Func_t DynFindSymbol(const char *module, const char *entry) override;
0186 int Load(const char *module, const char *entry = "", Bool_t system = kFALSE) override;
0187 void Unload(const char *module) override;
0188 void ListSymbols(const char *module, const char *re = "") override;
0189 void ListLibraries(const char *regexp = "") override;
0190
0191
0192 TInetAddress GetHostByName(const char *server) override;
0193 TInetAddress GetPeerName(int sock) override;
0194 TInetAddress GetSockName(int sock) override;
0195 int GetServiceByName(const char *service) override;
0196 char *GetServiceByPort(int port) override;
0197 int ConnectService(const char *server, int port, int tcpwindowsize, const char *protocol = "tcp");
0198 int OpenConnection(const char *server, int port, int tcpwindowsize = -1, const char *protocol = "tcp") override;
0199 int AnnounceTcpService(int port, Bool_t reuse, int backlog, int tcpwindowsize = -1, ESocketBindOption socketBindOption = ESocketBindOption::kInaddrAny) override;
0200 int AnnounceUdpService(int port, int backlog, ESocketBindOption socketBindOption = ESocketBindOption::kInaddrAny) override;
0201 int AnnounceUnixService(int port, int backlog) override;
0202 int AnnounceUnixService(const char *sockpath, int backlog) override;
0203 int AcceptConnection(int sock) override;
0204 void CloseConnection(int sock, Bool_t force = kFALSE) override;
0205 int RecvRaw(int sock, void *buffer, int length, int flag) override;
0206 int SendRaw(int sock, const void *buffer, int length, int flag) override;
0207 int RecvBuf(int sock, void *buffer, int length) override;
0208 int SendBuf(int sock, const void *buffer, int length) override;
0209 int SetSockOpt(int sock, int option, int val) override;
0210 int GetSockOpt(int sock, int option, int *val) override;
0211
0212
0213 int GetSysInfo(SysInfo_t *info) const override;
0214 int GetCpuInfo(CpuInfo_t *info, Int_t sampleTime = 1000) const override;
0215 int GetMemInfo(MemInfo_t *info) const override;
0216 int GetProcInfo(ProcInfo_t *info) const override;
0217
0218 ClassDefOverride(TUnixSystem,0)
0219 };
0220
0221 #endif