gbatch_jobdata - read a job's job script
FILE *gbatch_jobdata(const int fd, const int flags, const slotno_t slot)
int gbatch_jobdata(const int fd, const int outfile, int(*fn)(int,void*,unsigned), const unsigned, flags, const slotno_t slotno)
The function gbatch_jobdata is used to retrieve the job script of a
job. There are two versions, one for the Unix and GNU/Linux API and
one for the Windows API. The second form is used under Windows as
there is no acceptable substitute for the pipe(2)
system call.
In both forms of the call, fd is a file descriptor which was
previously returned by a successful call to gbatch_open(3)
.
flags is zero or GBATCH_FLAG_IGNORESEQ
to ignore recent changes
to the job list.
slot is the slot number corresponding to the job as returned by
gbatch_joblist(3)
or xb_jobfindslot(3)
.
The difference between the two versions of gbatch_jobadd is in the method of passing the job script.
The Unix and GNU/Linux API version returns a stdio file descriptor
which may be used with the standard I/O functions getc(3)
, fread(3)
etc to read the job script. The job script should always be read to
the end and then using fclose(3)
to ensure that all incoming data on
the socket is collected.
If there is any kind of error, then gbatch_jobdata will return NULL
,
leaving the error code in the external variable gbatch_dataerror.
In the case of the Windows version, the specified function fn is invoked with parameters similar to write to read data to pass across as the job script, the argument outfile being passed as a file handle as the first argument to fn.
fn may very well be write. The reason for the routine not invoking write itself is partly flexibility but mostly because some versions of Windows DLLs do not allow read to be invoked directly from within it.
N.B. This routine is particularly susceptible to peculiar effects due to assignment of insufficient stack space.
The return value is zero for success, or an error code. The error code
is also assigned to the external variable gbatch_dataerror
for
consistency with the Unix version.
The Unix version of gbatch_jobdata returns NULL
if unsuccessful,
placing the error code in the external variable gbatch_dataerror
.
The Windows version of gbatch_jobdata returns zero if successful, otherwise an error code.
The error codes which may be returned are defined in the include file \fBgbatch.h\fR.
int fd, ret, ch; FILE *inf; slotno_t slot;
/* select a job assign it to slot */
inf = gbatch_jobdata(fd, XBABI_IGNORESEQ, slot);
if (!inf) { /* error in gbatch_dataerror */ . . . } while ((ch = getc(inf)) != EOF) putchar(ch);
fclose(inf);
gbatch_jobadd(3)
,
gbatch_jobfind(3)
,
gbatch_joblist(3)
,
gbatch_jobmon(3)
,
gbatch_jobop(3)
,
gbatch_jobread(3)
,
gbatch_open(3)
Copyright (c) 2009 Free Software Foundation, Inc. This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law.
John M Collins, Xi Software Ltd.