03-25-2014
As before, I did not compile or test the code. There may be other issues.
content is allocated and freed but never used.
fd will never contain an error code; it's always a pointer value. When that pointer is NULL, it indicates an error and the error code is in errno. That's what you should be inspecting during error handling. To convert the integer errno into a useful message, something like strerror() will help.
As you discovered, inserting arbitrary text into a script can present serious issues. The simplest solution is to write the reminder's text to a separate file.
strcpy of optarg to text is unsafe and can overflow. You can use strncpy, but then must be careful to ensure that the string is always null-terminated. strlcpy is a simpler alternative, if available. However, the simplest alternative in this case is to not copy at all.
Not only do you not need to copy, you don't need to allocate either. The reminder's text has already been allocated storage during startup. It's in argv. The only thing you need to do is pass around the pointer. The default value has also been stored away in the executable's image and it's location can also be passed around.
You implied that you are no longer waiting in the parent, but since the code is still there, a couple of notes about it.
You should always check WIFEXITED before using WEXITSTATUS (as you did with WIFSIGNALED before using WTERMSIG). An implementation is not forbidden from overloading bits for signal and status information (though I don't know if any implementation actually does so).
For portability and readability (especially for readability), it's a far better choice to use the macros in signal.h. Instead of 6, use SIGABRT. As far as I know, even though the kill(1) utility is required to recognize -6 as SIGABRT, nothing requires the kill(2) system call implementation to equate 6 with SIGABRT (although it almost certainly does).
Regarding your interprocess communication question, your pid file idea seems perfectly reasonable.
Regards,
Alister
This User Gave Thanks to alister For This Post:
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
If I want to write program that spread the work to its child process so that each process compute some task what should I do?
The objective of my program is to fill in the table which (10*10) in dimension and each column is filled with the fibonacci value of i+j (i mean current row and j mean... (1 Reply)
Discussion started by: robocup
1 Replies
2. UNIX for Dummies Questions & Answers
Dear Experts
Why we always hear that unix operating system is Multi User and Multi task. What does these two means. I have looked at some books and documents but couldn't find aclear explenation. Can we say Windows operating system is also multi user and multi task??
Thanks for your help in... (6 Replies)
Discussion started by: Reza Nazarian
6 Replies
3. Programming
Hi,
Am supposed to use message queues to send and receive messages between the processes. when i was working on that i realised that the message qid and the message queue related data should be maintained in a shared memory so that it can be accessed by all the processes. Could anybody refer... (10 Replies)
Discussion started by: rvan
10 Replies
4. Programming
Hi,
I'm trying to compile the following code:
/************** Begin <test.c> ***************/
/*
* Compiled with: gcc -Wall -o test test.c
*/
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("I'm process %d, son of %d \n", getpid(), getppid());
printf("Hello \n");... (3 Replies)
Discussion started by: djodjo
3 Replies
5. Programming
Hi,
I'm trying to compile the following code:
/************** Begin <test.c> ***************/
/*
* Compiled with: gcc -Wall -o test test.c
*/
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("I'm process %d, son of %d \n", getpid(), getppid());
... (5 Replies)
Discussion started by: djodjo
5 Replies
6. High Performance Computing
I read that 'Any single program that can run as multiple processes can benefit from OpenMosix: "The GIMP" photo editor and the "kandel" fractal generator are known to do this.
Are there other load-balancing clusters that do support multi-process applications? (1 Reply)
Discussion started by: Advice Pro
1 Replies
7. Shell Programming and Scripting
I have a unix directory where a million of small text files getting accumulated every week.
As of now there is a shell batch program in place which merges all the files in this directory into a single file and ftp to other system.
Previously the volume of the files would be around 1 lakh... (2 Replies)
Discussion started by: vk39221
2 Replies
8. Shell Programming and Scripting
Hi,
I have a problem where I need to make this input:
nameRow1a,text1a,text2a,floatValue1a,FloatValue2a,...,floatValue140a
nameRow1b,text1b,text2b,floatValue1b,FloatValue2b,...,floatValue140b
look like this output:
nameRow1a,text1b,text2a,(floatValue1a - floatValue1b),(floatValue2a -... (4 Replies)
Discussion started by: nricardo
4 Replies
9. Programming
I am trying to write a large X app. I have successfully modified my xorg.conf to setup 4 monitors on an NVIDIA Quatro5200. I am trying to modify a simple hello world application to open a window on three of the four monitors. depending on the changes to loop the window creation section and event... (2 Replies)
Discussion started by: advorak
2 Replies
10. Shell Programming and Scripting
hi
I want to call a lot of links with the post method
What to do to speed it up??
####This method is slow
#!/bin/bash
func2() {
index1=0
while read line ; do
index1=$(($index1+1))
url=$line
done < tmp/url1.txt
} (10 Replies)
Discussion started by: mnnn
10 Replies
LEARN ABOUT OPENSOLARIS
abort
abort(3C) Standard C Library Functions abort(3C)
NAME
abort - terminate the process abnormally
SYNOPSIS
#include <stdlib.h>
void abort(void);
DESCRIPTION
The abort() function causes abnormal process termination to occur, unless the signal SIGABRT is being caught and the signal handler does
not return. The abnormal termination processing includes at least the effect of fclose(3C) on all open streams and message catalogue
descriptors, and the default actions defined for SIGABRT. The SIGABRT signal is sent to the calling process as if by means of the raise(3C)
function with the argument SIGABRT.
The status made available to wait(3C) or waitpid(3C) by abort will be that of a process terminated by the SIGABRT signal. abort will
override blocking or ignoring the SIGABRT signal.
RETURN VALUES
The abort() function does not return.
ERRORS
No errors are defined.
USAGE
Catching the signal is intended to provide the application writer with a portable means to abort processing, free from possible interfer-
ence from any implementation-provided library functions. If SIGABRT is neither caught nor ignored, and the current directory is writable,
a core dump may be produced.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability |Standard |
+-----------------------------+-----------------------------+
|MT-Level |Safe |
+-----------------------------+-----------------------------+
SEE ALSO
exit(2), getrlimit(2), kill(2), fclose(3C), raise(3C), signal(3C), wait(3C), waitpid(3C), attributes(5), standards(5)
SunOS 5.11 24 Jul 2002 abort(3C)