|
Here is the /COPY from my RPG xTools service program for many of the IFS
routines. You can use it freely; you just have to keep the original notice
in the source code.
Note that I've used two naming conventions, xxxxIFS and IFSxxxx.
xxxxIFS use the Unix C runtime library and provide the most flexibility.
IFSxxxx use the As/400 IFS_C_xxxxx routines that allow a record-at-a-time
I/O to data on the IFS as well as other interesting things.
The point is, pick one style and use it. I now use the xxxxxIFS prototypes
almost exclusively.
-Bob Cozzi
D/IF NOT DEFINED(XTOOLS_IO_PROTOTYPES)
D/DEFINE XTOOLS_IO_PROTOTYPES
*********************************************************
** Copyright 2003 - Robert Cozzi, Jr.
** All rights reserved.
** RPG xTool - IFS Prototypes collection
** WWW.rpgxTools.com
** Permission granted for internal use-only
** provided the text between the two lines
** containing all * (asterisks) are retained.
*********************************************************
D O_READ_ONLY C Const('r')
D O_WRITE_ONLY C Const('w')
D R_OK C Const(4)
D W_OK C Const(2)
D F_OK C Const(0)
D O_RDONLY C Const(1)
D O_WRONLY C Const(2)
D O_RDWR C Const(4)
D O_CREAT C Const(8)
D O_EXCL C Const(16)
D O_CCSID C Const(32)
D O_TRUNC C Const(64)
D O_APPEND C Const(256)
D O_SYNC C Const(1024)
D O_DSYNC C Const(2048)
D O_RSYNC C Const(4096)
D O_NOCTTY C Const(32768)
D O_SHARE_RDONLY C Const(65536)
D O_SHARE_WRONLY C Const(131072)
D O_SHARE_RDWR C Const(262144)
D O_SHARE_NONE C Const(524288)
D O_CODEPAGE C Const(8388608)
D O_TEXT_CREAT C Const(33554432)
D O_INHERITMODE C Const(134217728)
D O_TEXTDATA C Const(16777216)
D O_LARGEFILE C Const(536870912)
** Object Authority Flags
D S_IXOTH C Const(1)
D S_IWOTH C Const(2)
D S_IROTH C Const(4)
D S_IRWXO C Const(7)
D S_IXGRP C Const(8)
D S_IWGRP C Const(16)
D S_IRGRP C Const(32)
D S_IRWXG C Const(56)
D S_IXUSR C Const(64)
D S_IWUSR C Const(128)
D S_IRUSR C Const(256)
D S_IRWXU C Const(448)
D openIFS PR 10I 0 ExtProc('open64')
D szIFSFileName * Value options(*string)
D openFlags 10I 0 Value
D fMod 10U 0 Value options(*nopass)
D CCSID 10U 0 Value options(*nopass)
D writeIfs PR 10I 0 ExtProc('write')
D hFile 10I 0 Value
D pBuffer * Value
D nBytesToWrite...
D 10U 0 Value
D readIfs PR 10I 0 ExtProc('read')
D hFile 10I 0 Value
D szBuffer * Value
D nBufLen 10U 0 Value
D closeIfs PR 10I 0 ExtProc('close')
D hFile 10I 0 Value
D access PR 10I 0 ExtProc('access')
D szIFSFile * Value OPTIONS(*STRING)
D nAccessMode 10I 0 Value
D ifsTmpName PR * ExtProc('_C_IFS_tmpnam')
D szFileName * Value Options(*STRING)
D ifsTmpFile PR * ExtProc('_C_IFS_tmpfile')
D* void
D ifsOpen PR * ExtProc('_C_IFS_fopen')
D szFileName * Value Options(*STRING)
D ifsmode * Value Options(*STRING)
D ifsClose PR 10I 0 ExtProc('_C_IFS_fclose')
D pIfsFile * Value
D ifsGets PR * ExtProc('_C_IFS_fgets')
D inBuffer * Value Options(*STRING)
D inBufLen 10I 0 Value
D pIfsFile * Value
D ifsEof PR 10I 0 ExtProc('_C_IFS_feof')
D pIfsFile * Value
D ifsReadLine PR * ExtProc('_C_IFS_fgets')
D pInBuffer * Value
D inBufLen 10I 0 Value
D pIfsFile * Value
D ifsRead PR 10I 0 ExtProc('_C_IFS_fread')
D pInBuffer * Value
D unitSize 10I 0 Value
D inBufLen 10I 0 Value
D pIfsFile * Value
D ifsWrite PR 10I 0 ExtProc('_C_IFS_fwrite')
D szOutBuffer * Value
D unitSize 10I 0 Value
D nBufLen 10I 0 Value
D pIfsFile * Value
D ifsWriteLine PR * ExtProc('_C_IFS_fputs')
D szOutBuffer * Value OPTIONS(*STRING)
D pIfsFile * Value
D ifsErrNo PR * ExtProc('__errno')
* Get file status
D ifsStat pr 10I 0 ExtProc('stat64')
D ifsFile * Value options(*string)
D pStat * Value
D ifsStat_T DS ALIGN
D ifs_Permissions...
D 10U 0
D ifs_sFileID 10U 0
D ifs_sLnkCnt 5U 0
D ifs_sUsrID 10U 0
D ifs_sGroupID 10U 0
** File size, in bytes.
D ifs_nFileSize...
D 10I 0
D ifs_LastFileAccess...
D 10I 0
D ifs_LastChgTime...
D 10I 0
D ifs_LastStsChgTime...
D 10I 0
D ifs_FileSysID...
D 10U 0
D ifs_BlockSize...
D 10U 0
D ifs_AllocBytes...
D 10U 0
D ifs_ObjectType...
D 11A
D ifs_CodePage...
D 5U 0
D 62A
D ifs_GenID...
D 10U 0
** Link (Create a link)
D ifsLink PR 10I 0 extproc('link')
D szFilePath * value options(*string)
D szNewLink * value options(*string)
** Unlink (Unlink an IFS file)
D ifsUnlink PR 10I 0 extproc('unlink')
D szFilePath * value options(*string)
/IF NOT DEFINED(C_ERRNO)
/DEFINE C_ERRNO
.....D*ame+++++++++++EUDS.......Length+TDc.Functions++++++++++++++++++++
D errno PR * ExtProc('__errno')
/ENDIF
/ENDIF
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Mike Wills
Sent: Thursday, July 29, 2004 10:34 AM
To: Midrange_RPG400_L
Subject: Writing to an IFS file
Is there any free wrappers for writing to the IFS? We are going to be
comming up on a project, and I would like to avoid writting that from
scratch if I don't have to. Does the iSeries Toolkit have something
like that?
--
Mike Wills
iSeries Programmer/Lawson Administrator
koldark@xxxxxxxxx
http://www.koldark.net
Want Gmail? Email koldark+gmail@xxxxxxxxx to get on my waiting list.
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.