10-10-2011
I think -
You want the word atomic - that means the operation completes before any interrupt can be delivered, like a signal.
Primitive does not mean a call cannot be interrupted by some type of interrupt or signal.
It does mean that they are syscalls, which are direct calls with a defined entry point into the kernel. And they are part of kernel code.
Reentrant has only a little to do with the above. You can write a reentrant function yourself in C.
Reentrant means a function call can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocations complete executing. This is common in threads. In other words a function is reentrant when it can be interrupted anywhere in the middle and then resumed much later - and it always completes correctly even if another instance of the function is started before the old one completes. Being "paused" while another thread runs does not break it.
Any function like localtime that creates a variable in memory that can be overwritten by a subsequent call to the same function is not reentrant.
strtok is notoriously non-reentrant, so a lot of systems have strtok_r. The "_r" terminating characters are a defacto standard for saying this is a "reentrant" function.
9 More Discussions You Might Find Interesting
1. Programming
Hi,
In My Program I have HEXA value in a string array as below :
char hexa="0xabcd1234"; //This is how I'm getting source data.
Actaully I want this hexa value to be decremented with -1
and store it in another string as "0xabcd1234".
Can any body help me how to do that..?
I... (1 Reply)
Discussion started by: S.Vishwanath
1 Replies
2. Programming
I have a question regarding the recv syscall.
Suppose I have a client/server and the following exchange of message took place:
Client --> Server using multiple send syscalls one after another immediately:
send "Packet1"
send "Packet2"
send "Packet3"
Server receives in the... (2 Replies)
Discussion started by: heljy
2 Replies
3. Programming
Hi all,
i just started started learning system programming and want to pursue a career in the sys prog area.
below is the program that use a fork() call.
i read in one of the tutorials that parent process and child process uses different address spaces and runs concurrently.
that meas each... (2 Replies)
Discussion started by: MrUser
2 Replies
4. UNIX for Advanced & Expert Users
Hi all,
I am using ptrace to keep track of clone syscalls in a program. However, I found that the traced syscall cant be paired. for example, there are some syscalls that have entry, but without exit showing up in the traced sequences. So, is there anyway to distinguish the entry and exit of a... (0 Replies)
Discussion started by: tristartom
0 Replies
5. Shell Programming and Scripting
Hi Guys,
Happy New Year to you all!
I have a requirement to read an embedded new-line using KSH's read builtin.
Here is what I am trying to do:
run_sql "select guestid, address, email from guest" | while read id addr email
do
## Biz logic goes here
done
I can take care of any... (6 Replies)
Discussion started by: a_programmer
6 Replies
6. UNIX for Dummies Questions & Answers
Hello All,
i am a newbie and need some help when reading a csv file in a bourne shell script. I want to read 10 lines, then wait for a minute and then do a reading of another 10 lines and so on in the same way. I want to do this till the end of file.
Any inputs are appreciated
... (3 Replies)
Discussion started by: victor.s
3 Replies
7. UNIX for Advanced & Expert Users
Hello Experts,
If a Solaris process is calling some syscall, and right now execution is inside syscall doing only CPU work, for example the inside simplest times syscall,
-> app_func
=> times
<< we are here now, we have entered in the times, but not exited yet
<= times
<- app_func... (9 Replies)
Discussion started by: sant
9 Replies
8. Red Hat
Hi,
I wanna add my own system call to Fedora 18 kernel 3.8.2.
From kernel 3.3 I heard there is a new system to add system calls.
So where i can find a guides ?
I wanna print this text: "Hello world!" in terminal, not dmesg. (4 Replies)
Discussion started by: googz
4 Replies
9. Programming
Hello to all
I want download a file in osx intel 64 with NASM , I want to use socket syscall
This is part of my code
section .data
command db "GET /test/2.gif HTTP/1.1\r\nHost: 10.1.1.187\r\n\r\n", 0
; url db "http://172.16.207.153/test/2.gif", 0
global main... (1 Reply)
Discussion started by: recher.jack
1 Replies
LEARN ABOUT REDHAT
strtok_r
STRTOK(3) Linux Programmer's Manual STRTOK(3)
NAME
strtok, strtok_r - extract tokens from strings
SYNOPSIS
#include <string.h>
char *strtok(char *s, const char *delim);
char *strtok_r(char *s, const char *delim, char **ptrptr);
DESCRIPTION
A `token' is a nonempty string of characters not occurring in the string delim, followed by or by a character occurring in delim.
The strtok() function can be used to parse the string s into tokens. The first call to strtok() should have s as its first argument. Subse-
quent calls should have the first argument set to NULL. Each call returns a pointer to the next token, or NULL when no more tokens are
found.
If a token ends with a delimiter, this delimiting character is overwritten with a and a pointer to the next character is saved for the
next call to strtok(). The delimiter string delim may be different for each call.
The strtok_r() function is a reentrant version of the strtok() function, which instead of using its own static buffer, requires a pointer
to a user allocated char*. This pointer, the ptrptr parameter, must be the same while parsing the same string.
BUGS
Never use these functions. If you do, note that:
These functions modify their first argument.
These functions cannot be used on constant strings.
The identity of the delimiting character is lost.
The strtok() function uses a static buffer while parsing, so it's not thread safe. Use strtok_r() if this matters to you.
RETURN VALUE
The strtok() function returns a pointer to the next token, or NULL if there are no more tokens.
CONFORMING TO
strtok()
SVID 3, POSIX, BSD 4.3, ISO 9899
strtok_r()
POSIX.1c
SEE ALSO
index(3), memchr(3), rindex(3), strchr(3), strpbrk(3), strsep(3), strspn(3), strstr(3)
GNU
2000-02-13 STRTOK(3)