Unix and Posix Standards

Slides:



Advertisements
Similar presentations
C++ Language Fundamentals. 2 Contents 1. Introduction to C++ 2. Basic syntax rules 3. Declaring and using variables.
Advertisements

3.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Process An operating system executes a variety of programs: Batch system.
R4 Dynamically loading processes. Overview R4 is closely related to R3, much of what you have written for R3 applies to R4 In R3, we executed procedures.
Introduction to Processes
CS 311 – Lecture 09 Outline Introduction to Systems programming – System calls – Categories of system calls Error Management System calls File Handling.
Page 1 Processes and Threads Chapter 2. Page 2 Processes The Process Model Multiprogramming of four programs Conceptual model of 4 independent, sequential.
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process Dale/Weems/Headington.
Concurrency Sharing of resources in the same time frame Apparent concurrency is sharing the same CPU, memory, or I/O device Real concurrency is sharing.
Advanced UNIX progamming Fall 2002 Instructor: Ashok Srinivasan Lecture 5 Acknowledgements: The syllabus and power point presentations are modified versions.
By Noorez Kassam Welcome to JNI. Why use JNI ? 1. You already have significantly large and tricky code written in another language and you would rather.
Chapter 2: Linux & POSIX “She sells bash shells by the C shore”
C++ History C++ was designed at AT&T Bell Labs by Bjarne Stroustrup in the early 80's Based on the ‘C’ programming language C++ language standardised in.
UNIX Files File organization and a few primitives.
Advanced Programming in the UNIX Environment Hop Lee.
Introduction to c++ programming - object oriented programming concepts - Structured Vs OOP. Classes and objects - class definition - Objects - class scope.
UNIX and POSIX Standards
CS-1030 Dr. Mark L. Hornick 1 Basic C++ State the difference between a function/class declaration and a function/class definition. Explain the purpose.
1 What is a Named Constant? A named constant is a location in memory that we can refer to by an identifier, and in which a data value that cannot be changed.
EEL 3801 C++ as an Enhancement of C. EEL 3801 – Lotzi Bölöni Comments  Can be done with // at the start of the commented line.  The end-of-line terminates.
Lecturer: Nguyen Thi Hien Software Engineering Department Home page: hienngong.wordpress.com Chapter 2: Language C++
Chapter 15 - C++ As A "Better C"
UNIX AND POSIX APIs APIs – a set of application programming
Chapter 4: Threads Modified by Dr. Neerja Mhaskar for CS 3SH3.
C ++ MULTIPLE CHOICE QUESTION
Andy Wang Object Oriented Programming in C++ COP 3330
Lecture 3 Process.
User-Written Functions
Process concept.
Chapter 6 CS 3370 – C++ Functions.
Chapter 7 Text Input/Output Objectives
Introduction to C++ Systems Programming.
Realizing Concurrency using the thread model
Protection of System Resources
Chapter 7 Text Input/Output Objectives
Advanced UNIX progamming
History of ‘C’ Root of the morden language is ALGOL It’s first
Process Management Presented By Aditya Gupta Assistant Professor
Using Processes.
BY GAWARE S.R. COMPUTER SCI. DEPARTMENT
C Basics.
Example questions… Can a shell kill itself? Can a shell within a shell kill the parent shell? What happens to background processes when you exit from.
C++ History C++ was designed at AT&T Bell Labs by Bjarne Stroustrup in the early 80's Based on the ‘C’ programming language C++ language standardised in.
Exceptional Control Flow: System Calls, Page Faults etc.
Threads and Cooperation
System Structure and Process Model
Fork and Exec Unix Model
System Structure B. Ramamurthy.
Realizing Concurrency using the thread model
Interprocess Communication
System Structure and Process Model
Operating Systems Lecture 6.
Pointers, Dynamic Data, and Reference Types
Andy Wang Object Oriented Programming in C++ COP 3330
Process Description and Control
Process Description and Control
Advanced UNIX progamming
Process Control B.Ramamurthy 2/22/2019 B.Ramamurthy.
Programming with Shared Memory
Realizing Concurrency using the thread model
Programming with Shared Memory
Unix Process Control B.Ramamurthy 4/11/2019 B.Ramamurthy.
UNIX AND POSIX APIs APIs – a set of application programming
Processes in Unix and Windows
Chapter 2 Processes and Threads 2.1 Processes 2.2 Threads
The C Language: Intro.
Process Description and Control in Unix
Process Description and Control in Unix
Low-Level I/O – the POSIX Layer CSE 333 Winter 2019
More C++ Classes Systems Programming.
Presentation transcript:

Unix and Posix Standards Course code: 10CS62 Unix and Posix Standards Engineered for Tomorrow Prepared by Department of CSE

Contents The ANSI C Standard The ANSI/ISO C++ Standards Difference between ANSI C and C++ The POSIX Standards The POSIX.1 FIPS Standard The X/Open Standards. UNIX and POSIX APIs API Common Characteristics.

The ANSI C Standard ANSIC Standard X3.159-1989 Engineered for Tomorrow The ANSI C Standard ANSIC Standard X3.159-1989 The difference between ANSI C AND K&R C Function prototyping: * ANSI C : data-type function-name (data type parameter name,……………………..) Ex: int f1(int a , int b); ANSI C Compliers check for function calls in program that pass invalid number of arguments and incompatible argument data types

Engineered for Tomorrow * K&R C : data-type function-name (parameter name,……………………..) EX: int f1(a , b); int a, b; In K&R C ,invalid function calls pass compilation but cause program to crash when they are executed.

Constant and volatile qualifiers * Present in ANSI C not in K&R C Engineered for Tomorrow Constant and volatile qualifiers * Present in ANSI C not in K&R C * const-implies data cant be changed /*here printf cant change the value of x */ int printf(const char* x,….) { }

It specifies value of some variables may change asynchronously. Engineered for Tomorrow Volatile qualifier : implies the compiler can make any optimization of the variable It specifies value of some variables may change asynchronously. EX : char get_io() { volatile char* io_port=0x7777; char ch=*io_port; ch = *io_port; }

Wide character support and internationalization Engineered for Tomorrow Wide character support and internationalization *support to store characters which occupy more than one byte *ANSI C defines SETLOCALE function *which helps to specify the format of date monetary and real number presentation

SETLOCALE #include <locale.h> Engineered for Tomorrow SETLOCALE #include <locale.h> Char setlocale (int category, const char* locale); Category 1 Category 2 LC_TYPE en_US//US LC_MONETARY fr_FR//French LC_NUMERIC de_DE//German LC_TIME LC_ALL

Permit function pointers to be used without dereferencing Engineered for Tomorrow Permit function pointers to be used without dereferencing *ANSI C –a function pointer can be used like a function Void test(double xyz,const int* iptr); Void(*funcptr)(double, const int*)=test; Function test can be invoked as follows: test(12.78,”Hello”); funptr(12.78,”Hello”);

Engineered for Tomorrow *K&R C – requires the pointer to be de referenced to call the function (*funcptr)(12.78,”hello”);

Engineered for Tomorrow Feature test macros ANSI C also defines set of CPP (C Processor) symbols _STDC_ : 1-if underlying system is ANSI C compliant 0-Otherwise _LINE_ : Physical line number of the module _FILE_ : filename of module where the symbol is present _DATE_ : date of compilation of the module _TIME_ : time of compilation of the module

Engineered for Tomorrow #include <stdio.h> int main() { #if __STDC__ == 0 printf("cc is not ANSI C compliant\n"); #else printf(" %s compiled at %s:%s. This statement is at line %d\n", __FILE__, __DATE__, __TIME__, __LINE__); #endif return 0; }

THE ANSI/ISO C++STANDARD Engineered for Tomorrow THE ANSI/ISO C++STANDARD WG21-ISO and ANSI X3J16 : ANSI C/ISO C++ standard Version 3.0 report : c++ should have * classes * derived classes * virtual classes * operator overloading * template classes * template function * exception handling * io stream

ANSI C AND ANSI C++ ANSI C Engineered for Tomorrow ANSI C AND ANSI C++ ANSI C -default prototype if called before declaration or defn -int f1() is same as int f1(…) -no type safe linkage Typesafe linkage enforces the right number and type of parameters are passed at link time. ANSI C++ - prototype is mandatory int f1(void) -type safe linkage

Engineered for Tomorrow THE POSIX STANDARDS Posix.1 : IEEE 1003.1-1990 adapted by ISO as ISO/IEC 9945:1:1990 standard *gives standard for base operating system API Posix.1b : IEEE 1003.4-1993 * gives standard APIs for real time operating system interface including interprocess communication

Other POSIX compliant systems Engineered for Tomorrow Posix.1c : specifies multi thread programming interface Other POSIX compliant systems *VMS of DEC *OS/2 of IBM *W-NT of Microsoft *Sun solaris 2.t *HP-UX 9.05

To ensure program confirms to POSIX.1 standard user should define Engineered for Tomorrow To ensure program confirms to POSIX.1 standard user should define _POSIX_SOURCE as #define _POSIX_SOURCE OR Specify -D _POSIX_SOURCE to a C++ compiler

_POSIX_C_SOURCE : its value indicating POSIX version Engineered for Tomorrow _POSIX_C_SOURCE : its value indicating POSIX version _POSIX_C_SOURCE value----Meaning 198808L---- First version of POSIX.1 compliance 199009L---- Second version of POSIX.1 199309L---- POSIX.1 and POSIX.1b

#define _POSIX_SOURCE #define _POSIX_C_SOURCE 199309L Engineered for Tomorrow #define _POSIX_SOURCE #define _POSIX_C_SOURCE 199309L #include <iostream.h> #include <unistd.h> int main() { #ifdef _POSIX_VERSION cout << "System conforms to POSIX: " << _POSIX_VERSION << endl; #else cout << "_POSIX_VERSION is undefined\n"; #endif return 0; }

POSIX ENVIRONMENT Difference between POSIX and UNIX Engineered for Tomorrow POSIX ENVIRONMENT Difference between POSIX and UNIX * In UNIX C and C++ header files are included in /usr/include In POSIX they are just headers not header files and /usr/include neednot exist * UNIX – Superuser has special previlege and the superuser ID is always 0 POSIX – Doesnot support the concept of superuser nor the ID is 0

THE POSIX FEATURE TEST MACROS Engineered for Tomorrow THE POSIX FEATURE TEST MACROS _POSIX_JOB_CONTROL— The system supports job control _POSIX_SAVED_ID — keeps saved set-UID and set-GID _POSIX_CHOWN_RESTRICTED — If -1 user may change ownership of files owned by them else only users with special privilege can do so

_POSIX_NO_TRUNC — If -1 then any long Engineered for Tomorrow _POSIX_NO_TRUNC — If -1 then any long path name is automatically truncated to NAME_MAX else an error is generated _POSIX_VDISABLE — If -1 then there is no disabling character for special characters for all terminal devices otherwise the value is the disabling character value

Engineered for Tomorrow #define _POSIX_SOURCE #define _POSIX_C_SOURCE 199309L #include <iostream.h> #include <unistd.h> int main() { #ifdef _POSIX_JOB_CONTROL cout << "System supports job control\n"; #else cout << "System does not support job control\n"; #endif

#ifdef _POSIX_SAVED_IDS Engineered for Tomorrow #ifdef _POSIX_SAVED_IDS cout << "System supports saved set-UID and saved set-GID\n"; #else cout << "System does not support saved set-UID and saved set-GID\n"; #endif

Engineered for Tomorrow #ifdef _POSIX_CHOWN_RESTRICTED cout << "chown restricted option is: " << _POSIX_CHOWN_RESTRICTED <<endl; #else cout << "System does not support system-wide chown_restricted option\n"; #endif

#ifdef _POSIX_NO_TRUNC Engineered for Tomorrow #ifdef _POSIX_NO_TRUNC cout << "Pathname trucnation option is: " << _POSIX_NO_TRUNC << endl; #else cout << "System does not support system-wide pathname trucnation option\n"; #endif }

#ifdef _POSIX_VDISABLE Engineered for Tomorrow #ifdef _POSIX_VDISABLE cout << "Diable character for terminal files is: " << _POSIX_VDISABLE << endl; #else cout << "System does not support _POSIX_VDISABLE\n"; #endif return 0;

Engineered for Tomorrow Certain POSIX.1constants defined in <limit.h> with minimum values _POSIX_CHILD_MAX 6 max number of child processes that can be created at any one time by a process _POSIX_OPEN_MAX 16 max number of files that can be opened simultaneously by a process _POSIX_STREAM_MAX 8 max number of I/Ostreams that can be opened

max size, in bytes of arguments that can be Engineered for Tomorrow _POSIX_ARG_MAX 4096 max size, in bytes of arguments that can be passed to an exec function call _POSIX_NGROUP_MAX 0 max number of supplemental groups to which a process may belong _POSIX_PATH_MAX 255 max number of characters allowed in a pathname

max number of characters allowed in a filename _POSIX_LINK_MAX 8 Engineered for Tomorrow _POSIX_NAME_MAX 14 max number of characters allowed in a filename _POSIX_LINK_MAX 8 max number of links a file may have _POSIX_PIPE_BUF 512 max size of block of data that can be automatically read from or written to a pipe file

max capacity, in bytes, of a terminal’s input queue Engineered for Tomorrow _POSIX_MAX_INPUT 255 max capacity, in bytes, of a terminal’s input queue _POSIX_MAX_CANON 255 canonical input queue _POSIX_SSIZE_MAX 32767 max value that can be stored in a ssize_t- typed object _POSIX_TZNAME_MAX 3 max number of characters in a time zone name

Engineered for Tomorrow The sysconf() function provides a method for the application to determine the current value of a configurable system limit or option ( variable) The fpathconf() and pathconf() functions shall determine the current value of a configurable limit or option (variable) that is associated with a file or directory. Return file related configuration limits.

Long sysconf(const int limit_name); Engineered for Tomorrow Long sysconf(const int limit_name); Long pathconf(const char* pathname,int flimit_name); Long fpathconf(const int fdesc,int flimitname);

_SC_ARG_MAX- max size in bytes SC_CHILD_MAX _SC_CLK_TCK _SC_LINE_MAX Engineered for Tomorrow Sysconf limit values _SC_ARG_MAX- max size in bytes SC_CHILD_MAX _SC_CLK_TCK _SC_LINE_MAX _SC_JOB_CONTROL _SC_SAVED_IDS

_SC_VERSION _SC_RTSIG_MAX _SC_MQ_OPEN_MAX _SC_MQ_PRIO_MAX Engineered for Tomorrow _SC_VERSION _SC_RTSIG_MAX _SC_MQ_OPEN_MAX _SC_MQ_PRIO_MAX _SC_SEM_MSEMS_MAX _SC_SEM_VALUE_MAX

Pathconf limit values _PC_CHOWN_RESTRICTED _PC_NO_TRUNC _PC_VDISABLE Engineered for Tomorrow Pathconf limit values _PC_CHOWN_RESTRICTED _PC_NO_TRUNC _PC_VDISABLE _PC_PATH_MAX – max length in bytes _PC_LINK_MAX _PC_NAME_MAX – max length in bytes _PC_PIPE_BUF – max size of block of data

Engineered for Tomorrow Int res; If((res=sysconf(_SC_OPEN_MAX))==-1) perror(“sysconf”); Else cout<<res; If((res=pathconf(“/”,_PC_PATH_MAX))==-1) perror(“pathconf”); If((res=fpathconf(fd,_PC_CHOWN_RESTRICTED))==-1)

THE POSIX.1 FIPS STANDARD (Federal Information Processng Std) Engineered for Tomorrow THE POSIX.1 FIPS STANDARD (Federal Information Processng Std) It requires following features to be implemented in all FIPS-conforming systems. Job control : _POSIX_JOB_CONTROL must be defined Saved set-UID and set-GID : _POSIX_SAVED_IDS must be defined Long path name is supported _POSIX_NO_TRUNC != -1 _only authorised user can change ownership _POSIX_CHOWN_RESTRICTED != -1

_POSIX_VDISABLE should be defined Engineered for Tomorrow _POSIX_VDISABLE should be defined NGROUP_MAX – value should be at least 8 Read and write APIs should return the number of bytes transferred after the APIs have been interrupted by signals The group id of newly created file must inherit group ID of its containing directory

THE X/OPEN STANDARDS Formed by X/OPEN Organization Engineered for Tomorrow THE X/OPEN STANDARDS Formed by X/OPEN Organization X/Open portability guide, ISSUE 3 (XPG3) --- 1989 X/Open portability guide, ISSUE 4 (XPG4) --- 1999 The portability guide specifies a set of common facilities and C application program interface function to be provided on all UNIX-based “open systems”

Engineered for Tomorrow QUESTIONS What are the major differences between ANSI C and K & R C? explain (10) What is POSIX standard? Give the structure of the program to filter out non-POSIX compliant codes for a user program (10) What is an API ? How are they different from C library functions ? Calling an API is more time consuming than calling a user function . Justify or contradict (5)

Write a POSIX compliant C/C++ program to check following limits (10) Engineered for Tomorrow Write a POSIX compliant C/C++ program to check following limits (10) Maximum path length Maximum characters in a file name Maximum number of open files per process What is POSIX standard? Explain different subsets of POSIX standard .write the structure of the program to filter out non-POSIX compliant codes for a user program (6)

Engineered for Tomorrow Write a C++ program that prints the POSIX defined configuration options supported on any given system using feature test macros (8) List out all POSIX.1 and POSIX 1b defined system configuration limits in manifested constants with complete time limit , minimum value and meaning (10)

UNIX AND POSIX APIs APIs – a set of application programming Engineered for Tomorrow UNIX AND POSIX APIs APIs – a set of application programming interface functions that can be called by user’s programs to perform system specific functions

Common functions Determine system configuration and user information Engineered for Tomorrow Common functions Determine system configuration and user information File manipulation Process creation and control Interprocess communication Network communication

API COMMON CHARACTERISTICS Engineered for Tomorrow API COMMON CHARACTERISTICS API return -1 to indicate the execution has failed Global variable errno is set with an error code Perror function prints diagnostic message of the error to the standard output or calls streeror with errno as argument

ERROR STATUS CODE :: MEANING EACCESS :: No access to perform an Engineered for Tomorrow ERROR STATUS CODE :: MEANING EACCESS :: No access to perform an operation via a API EPERM :: a API was aborted because the calling process does not have superuser privilege ENOENT :: an invalid filename was specified to an API BADF :: a API was called with an invalid file descriptor EINTR :: a API execution was aborted due to signal interruption to signal interruption

EAGAIN :: a API was aborted because system resource it requested Engineered for Tomorrow EAGAIN :: a API was aborted because system resource it requested was temporarily unavailable ENOMEM :: a API was aborted because it could not allocate dynamic memory EIO :: I/O error occurred in a API excecution EPIPE :: a API attempted to write to a pipe which has no reader

EFAULT :: a API was passed an invalid address in one of its arguments Engineered for Tomorrow EFAULT :: a API was passed an invalid address in one of its arguments ENOEXEC :: a API could not execute a program via one of the exec API ECHILD :: a process doesnot have any child process which it can wait on