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
00525 
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.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Sep 15 10:19:39 2005 by doxygen 1.4.4 written by Dimitri van Heesch, © 1997-2003