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(1) General Commands Manual learn(1)
NAME
learn - Provides computer-aided instruction for the C shell
SYNOPSIS
learn [-directory] [subject] [lesson]
The learn command provides computer-aided instruction courses and practice in the use of Tru64 UNIX.
OPTIONS
Allows you to exercise a script in a nonstandard place.
DESCRIPTION
To get started, enter learn; if this is the first time that you are invoking the learn command, you are guided through a series of ques-
tions to determine what type of instruction you want to receive.
If you have used learn before and left your last session without completing a subject, the program uses information in $HOME/.learnrc to
start you up in the same place you left off.
To bypass questions, enter a subject or lesson. In order to enter a lesson, you must know the lesson number that you received in a previ-
ous learn command session. If you do not know the lesson number, enter the lesson number as a subject. The learn command searches for the
first lesson containing the subject you specified. If the lesson is a - (dash), learn prompts for each lesson; this is useful for debug-
ging.
You can specify the following subjects:
files editor vi morefiles macros eqn C
SUBCOMMANDS
There are a few special commands. The bye command terminates a learn session, and the where command tells you of your progress (where m
tells you more.) The again command redisplays the text of the lesson and again lesson lets you review lesson. The hint command prints the
last part of the lesson script used to evaluate a response, while hint m prints the entire lesson script. This is useful for debugging
lessons and might possibly give you an idea about what is expected.
EXAMPLES
To take the online lesson about files, enter: learn files
You are then prompted for further input.
FILES
Playpen directories. Start-up information.
SEE ALSO
Commands: csh(1), ex(1)
learn(1)