kdecore Library API Documentation

kprocess.h

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 1997 Christian Czezakte (e9025461@student.tuwien.ac.at) 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef __kprocess_h__ 00021 #define __kprocess_h__ 00022 00023 #include <sys/types.h> // for pid_t 00024 #include <sys/wait.h> 00025 #include <signal.h> 00026 #include <unistd.h> 00027 #include <qvaluelist.h> 00028 #include <qcstring.h> 00029 #include <qobject.h> 00030 #include "kdelibs_export.h" 00031 00032 class QSocketNotifier; 00033 class KProcessPrivate; 00034 class KPty; 00035 00124 class KDECORE_EXPORT KProcess : public QObject 00125 { 00126 Q_OBJECT 00127 00128 public: 00129 00142 enum Communication { 00143 NoCommunication = 0, 00144 Stdin = 1, Stdout = 2, Stderr = 4, 00145 AllOutput = 6, All = 7, 00146 NoRead 00147 }; 00148 00152 enum RunMode { 00157 DontCare, 00161 NotifyOnExit, 00165 Block, 00170 OwnGroup 00171 }; 00172 00177 KProcess( QObject* parent, const char *name = 0 ); 00178 // KDE4 merge with the above 00182 KProcess(); 00183 00192 virtual ~KProcess(); 00193 00205 bool setExecutable(const QString& proc) KDE_DEPRECATED; 00206 00207 00221 KProcess &operator<<(const QString& arg); 00225 KProcess &operator<<(const char * arg); 00231 KProcess &operator<<(const QCString & arg); 00232 00239 KProcess &operator<<(const QStringList& args); 00240 00245 void clearArguments(); 00246 00273 virtual bool start(RunMode runmode = NotifyOnExit, 00274 Communication comm = NoCommunication); 00275 00282 virtual bool kill(int signo = SIGTERM); 00283 00288 bool isRunning() const; 00289 00300 pid_t pid() const; 00301 00306 KDE_DEPRECATED pid_t getPid() const { return pid(); } 00307 00311 void suspend(); 00312 00316 void resume(); 00317 00326 bool wait(int timeout = -1); 00327 00334 bool normalExit() const; 00335 00344 bool signalled() const; 00345 00355 bool coreDumped() const; 00356 00363 int exitStatus() const; 00364 00373 int exitSignal() const; 00374 00403 bool writeStdin(const char *buffer, int buflen); 00404 00411 bool closeStdin(); 00412 00420 bool closeStdout(); 00421 00429 bool closeStderr(); 00430 00439 bool closePty(); 00440 00444 void closeAll(); 00445 00450 const QValueList<QCString> &args() /* const */ { return arguments; } 00451 00461 void setRunPrivileged(bool keepPrivileges); 00462 00468 bool runPrivileged() const; 00469 00476 void setEnvironment(const QString &name, const QString &value); 00477 00484 void setWorkingDirectory(const QString &dir); 00485 00502 void setUseShell(bool useShell, const char *shell = 0); 00503 00513 static QString quote(const QString &arg); 00514 00522 void detach(); 00523 00524 #ifdef Q_OS_UNIX 00536 void setUsePty(Communication comm, bool addUtmp); 00537 00546 KPty *pty() const; 00547 #endif 00548 00552 enum { PrioLowest = 20, PrioLow = 10, PrioLower = 5, PrioNormal = 0, 00553 PrioHigher = -5, PrioHigh = -10, PrioHighest = -19 }; 00554 00561 bool setPriority(int prio); 00562 00563 signals: 00570 void processExited(KProcess *proc); 00571 00572 00591 void receivedStdout(KProcess *proc, char *buffer, int buflen); 00592 00611 void receivedStdout(int fd, int &len); // KDE4: change, broken API 00612 00613 00628 void receivedStderr(KProcess *proc, char *buffer, int buflen); 00629 00636 void wroteStdin(KProcess *proc); 00637 00638 00639 protected slots: 00640 00646 void slotChildOutput(int fdno); 00647 00653 void slotChildError(int fdno); 00654 00661 void slotSendData(int dummy); // KDE 4: remove dummy 00662 00663 protected: 00664 00669 void setupEnvironment(); 00670 00675 QValueList<QCString> arguments; 00680 RunMode run_mode; 00687 bool runs; 00688 00696 pid_t pid_; 00697 00705 int status; 00706 00707 00713 bool keepPrivs; 00714 00727 virtual int setupCommunication(Communication comm); 00728 00741 virtual int commSetupDoneP(); 00742 00748 virtual int commSetupDoneC(); 00749 00750 00757 virtual void processHasExited(int state); 00758 00784 virtual void commClose(); 00785 00786 /* KDE 4 - commClose will be changed to perform cleanup only in all cases * 00787 * If @p notfd is -1, all data immediately available from the 00788 * communication links should be processed. 00789 * If @p notfd is not -1, the communication links should be monitored 00790 * for data until the file handle @p notfd becomes ready for reading. 00791 */ 00792 // virtual void commDrain(int notfd); 00793 00799 void setBinaryExecutable(const char *filename); 00800 00804 int out[2]; 00808 int in[2]; 00812 int err[2]; 00813 00817 QSocketNotifier *innot; 00821 QSocketNotifier *outnot; 00825 QSocketNotifier *errnot; 00826 00831 Communication communication; 00832 00838 int childOutput(int fdno); 00839 00845 int childError(int fdno); 00846 00850 const char *input_data; 00854 int input_sent; 00858 int input_total; 00859 00864 friend class KProcessController; 00865 00866 protected: 00867 virtual void virtual_hook( int id, void* data ); 00868 private: 00869 KProcessPrivate *d; 00870 }; 00871 00872 class KShellProcessPrivate; 00873 00883 class KDECORE_EXPORT KShellProcess: public KProcess 00884 { 00885 Q_OBJECT 00886 00887 public: 00888 00894 KShellProcess(const char *shellname=0); 00895 00899 ~KShellProcess(); 00900 00901 virtual bool start(RunMode runmode = NotifyOnExit, 00902 Communication comm = NoCommunication); 00903 00904 static QString quote(const QString &arg); 00905 00906 private: 00907 QCString shell; 00908 00909 protected: 00910 virtual void virtual_hook( int id, void* data ); 00911 private: 00912 KShellProcessPrivate *d; 00913 }; 00914 00915 00916 00917 #endif 00918
KDE Logo
This file is part of the documentation for kdecore Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 22:47:37 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003