⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfl.h

📁 本程序为在linux下实现FTP传输文件的实现
💻 H
📖 第 1 页 / 共 5 页
字号:
#   include <unistd.h>#   include <dirent.h>#   include <pwd.h>#   include <grp.h>#   include <io.h>#   include <process.h>#   include <sys/param.h>#   include <sys/socket.h>#   include <sys/select.h>#   include <sys/time.h>#   include <sys/stat.h>#   include <sys/ioctl.h>#   include <sys/file.h>#   include <sys/wait.h>#   include <netinet/in.h>              /*  Must come before arpa/inet.h     */#   include <arpa/inet.h>#   if (!defined (TCP_NODELAY))#       include <netinet/tcp.h>#   endif#endif#if (defined (__DJGPP__))#   include <unistd.h>#   include <dirent.h>#   include <pwd.h>#   include <grp.h>#   include <dir.h>#   include <sys/types.h>#   include <sys/param.h>#   include <sys/time.h>#   include <sys/stat.h>#   include <sys/ioctl.h>#   include <sys/file.h>#   include <sys/wait.h>#endif/*- Data types --------------------------------------------------------------*/typedef unsigned short  Bool;           /*  Boolean TRUE/FALSE value         */typedef unsigned char   byte;           /*  Single unsigned byte = 8 bits    */typedef unsigned short  dbyte;          /*  Double byte = 16 bits            */typedef unsigned short  word;           /*  Alternative for double-byte      */typedef unsigned long   dword;          /*  Double word >= 32 bits           */#if (defined (__IS_32BIT__))typedef unsigned long   qbyte;          /*  Quad byte = 32 bits              */#elsetypedef unsigned int    qbyte;          /*  Quad byte = 32 bits              */#endiftypedef void (*function) (void);        /*  Address of simple function       */#define local static void               /*  Shorthand for local functions    */typedef struct {                        /*  Memory descriptor                */    size_t size;                        /*    Size of data part              */    byte  *data;                        /*    Data part follows here         */} DESCR;typedef struct {                        /*  Variable-size descriptor         */    size_t max_size;                    /*    Maximum size of data part      */    size_t cur_size;                    /*    Current size of data part      */    byte  *data;                        /*    Data part follows here         */} VDESCR;typedef struct {                        /*  Database timestamp               */    long date;    long time;} TIMESTAMP;/*- Check compiler data type sizes ------------------------------------------*/#if (UCHAR_MAX != 0xFF)#   error "Cannot compile: must change definition of 'byte'."#endif#if (USHRT_MAX != 0xFFFFU)#   error "Cannot compile: must change definition of 'dbyte'."#endif#if (defined (__IS_32BIT__))#   if (ULONG_MAX != 0xFFFFFFFFUL)#       error "Cannot compile: must change definition of 'qbyte'."#   endif#else#   if (UINT_MAX != 0xFFFFFFFFU)#       error "Cannot compile: must change definition of 'qbyte'."#   endif#endif/*- Pseudo-functions --------------------------------------------------------*/#define FOREVER         for (;;)            /*  FOREVER { ... }              */#define until(expr)     while (!(expr))     /*  do { ... } until (expr)      */#define streq(s1,s2)    (!strcmp ((s1), (s2)))#define strneq(s1,s2)   (strcmp ((s1), (s2)))#define strused(s)      (*(s) != 0)#define strnull(s)      (*(s) == 0)#define strclr(s)       (*(s) = 0)#define strlast(s)      ((s) [strlen (s) - 1])#define strterm(s)      ((s) [strlen (s)])#define bit_msk(bit)    (1 << (bit))#define bit_set(x,bit)  ((x) |=  bit_msk (bit))#define bit_clr(x,bit)  ((x) &= ~bit_msk (bit))#define bit_tst(x,bit)  ((x) &   bit_msk (bit))#define tblsize(x)      (sizeof (x) / sizeof ((x) [0]))#define tbllast(x)      (x [tblsize (x) - 1])#if (defined (random))#   undef random#   undef randomize#endif#if (defined (min))#   undef min#   undef max#endif#if (defined (__IS_32BIT__))#define random(num)     (int) ((long) rand () % (num))#else#define random(num)     (int) ((int)  rand () % (num))#endif#define randomize()     srand ((unsigned) time (NULL))#define min(a,b)        (((a) < (b))? (a): (b))#define max(a,b)        (((a) > (b))? (a): (b))/*- ASSERT ------------------------------------------------------------------*//*  If DEBUG is defined, the ASSERT macro aborts if the specified condition *  is false.  Note that you must include sflsyst.c in your application, for *  the sys_assert() function. */#if (defined (DEBUG))#   ifdef __cplusplusextern "C" {#   endifvoid  sys_assert  (const char *filename, unsigned line_number);#   undef  ASSERT#   define ASSERT(f)    \        if (f)          \            ;           \        else            \            sys_assert (__FILE__, __LINE__)#   ifdef __cplusplus};#   endif#else#   define ASSERT(f)#endif/*- Boolean operators and constants -----------------------------------------*/#if (!defined (TRUE))#    define TRUE        1               /*  ANSI standard                    */#    define FALSE       0#endif/*- Symbolic constants ------------------------------------------------------*/#define FORK_ERROR      -1              /*  Return codes from fork()         */#define FORK_CHILD      0#undef  LINE_MAX                      #define LINE_MAX        1024            /*  Length of line from text file    */#if (!defined (PATH_MAX))               /*  Length of path variable          */#   define PATH_MAX     2048            /*    if not previously #define'd    */#endif                                  /*  EDM 96/05/28                     */#if (!defined (EXIT_SUCCESS))           /*  ANSI, and should be in stdlib.h  */#   define EXIT_SUCCESS 0               /*    but not defined on SunOs with  */#   define EXIT_FAILURE 1               /*    GCC, sometimes.                */#endif/*- System-specific definitions ---------------------------------------------*//*  On most systems, 'timezone' is an external long variable.  On a few, it *  is a function that returns a string.  We define TIMEZONE to be the long *  value.                                                                   */#undef  TIMEZONE#define TIMEZONE    timezone            /*  Unless redefined later           *//*  UNIX defines sleep() in terms of second; Win32 defines Sleep() in *  terms of milliseconds.  We want to be able to use sleep() anywhere.      */#if (defined (__WINDOWS__))#   if (defined (WIN32))#       undef  sleep#       define sleep(a) Sleep(a*1000)   /*  UNIX sleep() is seconds          */#   else#       define sleep(a)                 /*  Do nothing?                      */#   endif    /*  MSVC 1.x does not define standard signals if in Windows              */#   if (!defined (SIGINT))#   define SIGINT       2               /*  Ctrl-C sequence                  */#   define SIGILL       4               /*  Illegal instruction              */#   define SIGSEGV      11              /*  Segment violation                */#   define SIGTERM      15              /*  Kill signal                      */#   define SIGABRT      22              /*  Termination by abort()           */#   endif    /*  MSVC 4.x does not define SIGALRM, so we pinch SIGFPE                 */#   if (!defined (SIGALRM))#   define SIGALRM      SIGFPE          /*  Must be a known signal           */#   endif    /*  Define STDxx_FILENO macros                                           */#   if (!defined (STDIN_FILENO))#   define STDIN_FILENO   _fileno (stdin)#   define STDOUT_FILENO  _fileno (stdout)#   define STDERR_FILENO  _fileno (stderr)#   endif    /*  Support for LCC-WIN32 compiler                                       */#   if (defined (__LCC__))#       include <mmsystem.h>#       undef  TIMEZONE#       define TIMEZONE 0#       define environ _environ        extern char   **environ;        /*  Not defined in include files     */#   endif/*  On SunOs, the ANSI C compiler costs extra, so many people install gcc *  but using the standard non-ANSI C library.  We have to make a few extra *  definitions for this case.  (Here we defined just what we needed for *  Libero and SMT -- we'll add more code as required.)                      */#elif (defined (__UTYPE_SUNOS) || defined (__UTYPE_SUNSOLARIS))#   if (!defined (_SIZE_T))             /*  Non-ANSI headers/libraries       */#       define strerror(n)      sys_errlist [n]#       define memmove(d,s,l)   bcopy (s,d,l)        extern char *sys_errlist [];#   endif#elif (defined (__UTYPE_BSDOS))#   undef  TIMEZONE#   define TIMEZONE 0                   /*  timezone is not available        */#elif (defined (__UTYPE_FREEBSD))#   undef  TIMEZONE#   define TIMEZONE 0                   /*  timezone is not available        */#elif (defined (__UTYPE_NETBSD))#   undef  TIMEZONE#   define TIMEZONE 0                   /*  timezone is not available        */#elif (defined (__VMS__))    /*  This data structure is often used in OpenVMS library functions       */    typedef struct {                    /*  Fixed-string descriptor:         */        word  length;                   /*    Length of string in bytes      */        byte  dtype;                    /*    Must be DSC$K_DTYPE_T = 14     */        byte  class;                    /*    Must be DSC$K_CLASS_S = 1      */        char *value;                    /*    Address of start of string     */    } STRING_DESC;    #define VMS_STRING(name,value) STRING_DESC name = \                                        { sizeof (value) - 1, 14, 1, value }#endif#if (defined (__UNIX__) || defined (__VMS__) || defined (__DJGPP__))    extern char **environ;              /*  Not defined in include files     */#endif/*  On some systems (older Vaxen and Unixes) O_BINARY is not defined.        */#if (!defined (O_BINARY))#   define O_BINARY     0#endif/*  On some systems SIGALRM is not defined; we allow it in code anyhow       */#if (!defined (SIGALRM))#   define SIGALRM      1#endif/*  On some systems O_NDELAY is used instead of O_NONBLOCK                   */#if (!defined (O_NONBLOCK))#   if (!defined (O_NDELAY))#       define O_NDELAY 0#   endif#   if (defined (__VMS__))#       define O_NONBLOCK 0             /*  Can't use O_NONBLOCK on files    */#   else#       define O_NONBLOCK O_NDELAY#   endif#endif/*  We define constants for the way the current system formats filenames; *  we assume that the system has some type of path concept.                 */#if (defined (WIN32))                   /*  Windows 95/NT                    */#   define PATHSEP      ";"             /*  Separates path components        */#   define PATHEND      '\\'            /*  Delimits directory and filename  */#   define PATHFOLD     FALSE           /*  Convert pathvalue to uppercase?  */#   define NAMEFOLD     FALSE           /*  Convert filenames to uppercase?  */#   define MSDOS_FILESYSTEM             /*  MS-DOS derivative                */#elif (defined (__MSDOS__))             /*  16-bit Windows, MS-DOS           */#   define PATHSEP      ";"#   define PATHEND      '\\'#   if defined LFN                      /*  Support DRDOS long file names    */#       define PATHFOLD FALSE#       define NAMEFOLD FALSE#   else#       define PATHFOLD TRUE#       define NAMEFOLD TRUE#   endif#   define MSDOS_FILESYSTEM             /*  MS-DOS derivative                */#elif (defined (__VMS__))               /*  Digital OpenVMS                  */#   define PATHSEP      ","             /*    We work with POSIX filenames   */#   define PATHEND      '/'#   define PATHFOLD     TRUE#   define NAMEFOLD     TRUE#elif (defined (__UNIX__))              /*  All UNIXes                       */#   define PATHSEP      ":"#   define PATHEND      '/'#   define PATHFOLD     FALSE#   define NAMEFOLD     FALSE#elif (defined (__OS2__))               /*  OS/2 using EMX/GCC               */#   define PATHSEP      ";"             /*  EDM 96/05/28                     */#   define PATHEND      '\\'#   define PATHFOLD     TRUE#   define NAMEFOLD     FALSE#   define MSDOS_FILESYSTEM             /*  MS-DOS derivative                */#else#   error "No definitions for PATH constants"#endif/*- Capability definitions --------------------------------------------------*//* *  Defines zero or more of these symbols, for use in any non-portable *  code: * *  DOES_SOCKETS        We can use (at least some) BSD socket functions *  DOES_UID            We can use (at least some) uid access functions *  DOES_SNPRINTF       Supports snprintf and vsnprintf functions

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -