04-12-2012
fopen, fclose, et al are function calls -- they jump your program to a location in memory and execute the code there. If you ran the program in a debugger, you could potentially trace inside these functions and see what they do. They are built for reasons of convenience and portability -- you could build a function which works the same everywhere, for instance, even when the system calls might be slightly different, or add simple functionality like buffers, which is indeed what stdio calls like fwrite are for. It's faster to call putc() 10,000 times to write single chars than to call write() 10,000 times for single chars because putc will just dump it in memory for later.
They certainly can't replace system calls. To write to a file, fwrite() must ultimately call write().
System calls on the other hand are not libraries. They don't jump to the start of an instruction in memory, they pass a message to the operating system, then wait. If you try and trace inside a system call, there's nothing to trace, because your program literally stops running while the system call happens -- the action happens inside the kernel itself, where you can't see.
C is able to freely use raw system calls because it can understand the same data structures the kernel uses for system calls -- the kernel is also C. It compiles it down into raw assembly language like everything else; it becomes the setting of a few registers then something like INT 0x80 to make a software interrupt to inform the kernel you want a system call.
This is difficult for other languages to do natively. Surely they can do INT 0x80, but without the C language itself, it's very difficult to get the data structures right. I've seen some people hardcode system calls in perl and have their code stop working when they move it to a different system, because the data structures changed, but their code didn't. In C, you'd just use the native data structures for wherever you were, and your code wouldn't need to change.
7 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
I want to do a low level format like in windows (C:\format c:) but I don't know how it works in unix or linux.. Can somebody help me ? thnx :) (3 Replies)
Discussion started by: day
3 Replies
2. What is on Your Mind?
Post what languages (including scripting) you know, why and where you think that language is most usable. Also include libraries in which you're really good at (libusb, gtk, qt, etc).
assembly?
C or C++?
perl or python?
pascal?
bash or csh/tcsh?
opengl?
gtk or qt?
mono? (27 Replies)
Discussion started by: redoubtable
27 Replies
3. Programming
Hi,
I am trying to write zeroes to the hdd using a c program. I don't want to use the dd or ddrescue or any such inbuilt program because of reasons like real time progress, writing custom patterns. (my program is more like an erasure application, but does only zero fill).
here are the steps... (35 Replies)
Discussion started by: sponnusa
35 Replies
4. IP Networking
Hi,
What is the best reference that gives in detail on nic cards configuration , assigning multiple ip addresses to a single interface, netlink library etc and all basic stuff at this level..?
Thanks (2 Replies)
Discussion started by: Gopi Krishna P
2 Replies
5. AIX
Hello All
I have a system running AIX 61 shared uncapped partition (with 11 physical processors, 24 Virtual 72GB of Memory) .
The output from NMON, vmstat show a high run queue (60+) for continous periods of time intervals, but NO paging, relatively low I/o (6000) , CPU % is 40, Low network.... (9 Replies)
Discussion started by: IL-Malti
9 Replies
6. Programming
Hi friends,
I hope everyone is fine and doing well. I queried in my previous thread about the low-level qualities of C/C++ languages.I really thank you people for explaining, it was really helpful. One more ambiquity that I have in my mind is regarding the unix system calls like open, creat,... (1 Reply)
Discussion started by: gabam
1 Replies
7. Programming
How to use X11 without Xlib not XCB? How draw window directly on low level?
I must use anyway window manager like Motif?
I have ridden that X11 has server-client architecture, client send via TCP/IP to port 6000 request for primitives and get replies.
Where is detailed description of it? In X11... (0 Replies)
Discussion started by: AndrzejB
0 Replies
evp(3SSL) OpenSSL evp(3SSL)
NAME
evp - high-level cryptographic functions
SYNOPSIS
#include <openssl/evp.h>
DESCRIPTION
The EVP library provides a high-level interface to cryptographic functions.
EVP_Seal... and EVP_Open... provide public key encryption and decryption to implement digital "envelopes".
The EVP_Sign... and EVP_Verify... functions implement digital signatures.
Symmetric encryption is available with the EVP_Encrypt... functions. The EVP_Digest... functions provide message digests.
The EVP_PKEY... functions provide a high level interface to asymmetric algorithms.
Algorithms are loaded with OpenSSL_add_all_algorithms(3).
All the symmetric algorithms (ciphers), digests and asymmetric algorithms (public key algorithms) can be replaced by ENGINE modules
providing alternative implementations. If ENGINE implementations of ciphers or digests are registered as defaults, then the various EVP
functions will automatically use those implementations automatically in preference to built in software implementations. For more
information, consult the engine(3) man page.
Although low level algorithm specific functions exist for many algorithms their use is discouraged. They cannot be used with an ENGINE and
ENGINE versions of new algorithms cannot be accessed using the low level functions. Also makes code harder to adapt to new algorithms and
some options are not cleanly supported at the low level and some operations are more efficient using the high level interface.
SEE ALSO
EVP_DigestInit(3), EVP_EncryptInit(3), EVP_OpenInit(3), EVP_SealInit(3), EVP_SignInit(3), EVP_VerifyInit(3), OpenSSL_add_all_algorithms(3),
engine(3)
1.0.1e 2013-02-11 evp(3SSL)