Open System Services Porting Guide (G06.24+, H06.03+)
Table Of Contents
- What’s New in This Manual
- About This Manual
- 1 Introduction to Porting
- 2 The Development Environment
- 3 Useful Porting Tools
- 4 Interoperating Between User Environments
- Purpose of Interoperability
- The OSS User Environment
- OSS Commands for the Guardian User
- Guardian Commands for the UNIX User
- OSS Pathname and Guardian Filename Conversions
- Running the OSS Shell and Commands From TACL
- Running Guardian Commands From the OSS Shell
- Running OSS Processes With Guardian Attributes
- Using OSS Commands to Manage Guardian Objects
- 5 Interoperating Between Programming Environments
- 6 OSS Porting Considerations
- 7 Porting UNIX Applications to the OSS Environment
- 8 Migrating Guardian Applications to the OSS Environment
- General Migration Guidelines
- C Compiler Issues for Guardian Programs
- Using New and Extended Guardian Procedures
- Using OSS Functions in a Guardian Program
- Interoperating With OSS Programs
- Starting an OSS Program From the Guardian Environment
- C Compiler Considerations for OSS Programs
- Porting a Guardian Program to the OSS Environment
- How Arguments Are Passed to the C or C++ Program
- Differences in the Two Run-Time Environments
- Which Run-Time Routines Are Available
- Use of Common Run-Time Environment (CRE) Functions
- Replacing Guardian Procedure Calls With Equivalent OSS Functions
- Which IPC Mechanisms Can Be Used
- Interactions Between Guardian and OSS Functions
- 9 Porting From Specific UNIX Systems
- 10 Native Migration Overview
- 11 Porting or Migrating Sockets Applications
- 12 Porting Threaded Applications
- A Equivalent OSS and UNIX Commands for Guardian Users
- B Equivalent Guardian Commands for OSS and UNIX Users
- C Equivalent Inspect Debugging Commands for dbx Commands
- D Equivalent Native Inspect Debugging Commands for dbx Commands
- E Standard POSIX Threads Functions: Differences Between the Previous and Current Standards
- Glossary
- Index
Interoperating Between Programming Environments
Open System Services Porting Guide—520573-006
5-14
Mixed-Module Programming
modules). A mixed-module program is composed of at least one OSS module and at
least one Guardian module and runs as either an OSS process or a Guardian process;
it cannot run as a process in both environments. The environment of the module
containing the main() function determines the environment in which a process runs.
Figure 5-1 illustrates mixed-module programming; one Guardian and two OSS
modules are linked together with the third c89 command listed in the figure. gdnmod.c
and ossmod.c are each compiled with a separate c89 invocation. The third c89
command compiles ossmain.c and links it with gdnmod.o and ossmod.o. The
resulting program will run as an OSS process because the main() function is in the
OSS module called ossmain.c.
You should always include all relevant headers in the source modules to ensure
function references are resolved to the proper variant. Linking should be deferred until
all object modules are created. In the OSS environment, linking can be initiated
automatically for you by the c89 utility, as discussed in Section 2, The Development
Environment.
A mixed-module program enables Guardian C functions to access Guardian objects
from an OSS process and OSS functions to access OSS objects from a Guardian
process. You should use OSS C functions wherever possible to manipulate Guardian
objects. For example, if you want to open a Guardian file and do not need to access
any of the attributes that Guardian files have and OSS files do not, use the OSS
open() function. However, you can use a Guardian C function when you cannot
accomplish a task with OSS functions.
Many Guardian C library functions can be called from OSS programs. However, they
can be called only from modules compiled for the Guardian environment. In this case,
you compile the Guardian and OSS modules separately and link them together. Use
Figure 5-1. Mixed-Module Programming Using the c89 Utility
011VST .VSD
Guardian Module
OSS Module
OSS Module with
main() Function
OSS c89
Utility
OSS Process
c89 -Wsystype=guardian -c gdnmod.c
c89 -c ossmod.c
c89 ossmain.c gdnmod.o ossmod.o
gdnmod.c
ossmod.c
ossmain.c