<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>thank you for all your answerts.<BR>
&nbsp;<BR>
I try Paul sugesstion and&nbsp;use the waitpid funtions... <BR>
unfortunately it just success the first time after that waitpid alsways says Illegal seek ?????<BR>
&nbsp;<BR>
what do I wrong?<BR>
&nbsp;<BR>
thank you<BR>
&nbsp;<BR>
// -----------<BR>
// code...<BR>
&nbsp;<BR>
#include &lt;signal.h&gt;<BR>#include &lt;stdio.h&gt;<BR>#include &lt;sys/types.h&gt;<BR>#include &lt;sys/wait.h&gt;<BR>#include &lt;sched.h&gt;<BR>#include &lt;unistd.h&gt;<BR>#include &lt;syscall.h&gt;&nbsp;&nbsp;&nbsp; // for syscall(SYS_getpid)<BR>#include &lt;syslog.h&gt;<BR>#include &lt;errno.h&gt;<BR>#include &lt;fcntl.h&gt;<BR>#include &lt;sys/stat.h&gt;<BR>
#include "logCtrl.h"&nbsp;&nbsp; // printLog function<BR>
int transProcessId=0;<BR>char transStack[0x40000];<BR>
pid_t mypid;<BR>pid_t transpid;<BR>
<BR>int transProcess(){<BR>&nbsp; <BR>&nbsp; transpid = getpid();<BR>
&nbsp; int i;<BR>&nbsp; for(i=0;i&lt;15;i++){<BR>&nbsp;&nbsp;&nbsp; printLog(logTRANS,"transProc: %i",transpid); <BR>&nbsp;&nbsp;&nbsp; sleep(1); <BR>&nbsp; } <BR>&nbsp; printLog(logTRANS,"bye!");&nbsp; <BR>&nbsp; <BR>&nbsp; return 0;<BR>}<BR>
void startTransProcess(){<BR>&nbsp;<BR>&nbsp; mypid = getppid();<BR>&nbsp; printLog(logTRANS,"parent process ID: %i",mypid);&nbsp; <BR>&nbsp; if(transProcessId&gt;0) transProcessId=0;&nbsp; // transProcessId initialisieren<BR>
&nbsp; transProcessId=clone(transProcess, &amp;transStack[sizeof(transStack)-10],CLONE_VM|CLONE_FILES|CLONE_FS , 0);<BR>
&nbsp; if(transProcessId&gt;0){&nbsp;&nbsp;&nbsp; &nbsp;<BR>&nbsp;&nbsp;&nbsp; printLog(logMODUL1,"transProc started (PID: %d)",transProcessId);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; }<BR>&nbsp; else {<BR>&nbsp;&nbsp;&nbsp; printLog(logMODUL1,"transProc not started (PID: %d)",transProcessId);&nbsp;<BR>&nbsp; }<BR>};<BR>
<BR>void modul1()<BR>{<BR>&nbsp;<BR>&nbsp; if (!transProcessId) startTransProcess();&nbsp;<BR>
&nbsp; if(transProcessId&gt;0){<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if (waitpid (transProcessId, NULL, WNOHANG | __WCLONE) != 0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perror("waitpid()");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printLog(logMODUL1,"transProc (PID: %d)",transProcessId);&nbsp;&nbsp;&nbsp; &nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transProcessId=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printLog(logMODUL1,"start new transProc");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; <BR>}<BR>
&nbsp;<BR>
int mainprog()<BR>{<BR>&nbsp; printLog(logMAIN,"Program start");&nbsp; &nbsp;<BR>
&nbsp; while(1) {&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; modul1();<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; usleep(20*1000);<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp; }<BR>&nbsp; <BR>&nbsp; return 0;&nbsp; <BR>
}<BR>
<BR>// *******************************************************************************************<BR>
<BR>// -------------------------------------------------------------------------<BR>//&nbsp;&nbsp;&nbsp; <BR>// -------------------------------------------------------------------------<BR>//<BR>//<BR>// *******************************************************************************************<BR>//<BR>//<BR>// *******************************************************************************************<BR>//<BR>int main (int argc,char *argv[]){<BR>&nbsp;<BR>&nbsp; initLogCtrl();<BR>
&nbsp; mainprog(); <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp; return 0;<BR>&nbsp; <BR>}<BR><BR><BR><BR><BR><BR>

<HR id=stopSpelling>
<BR>
&gt; From: linuxcprogramming-request@lists.linux.org.au<BR>&gt; To: linuxcprogramming@lists.linux.org.au<BR>&gt; Date: Wed, 14 Nov 2007 20:20:11 +0000<BR>&gt; Subject: linuxCprogramming Digest, Vol 2, Issue 1<BR>&gt; <BR>&gt; Send linuxCprogramming mailing list submissions to<BR>&gt; linuxcprogramming@lists.linux.org.au<BR>&gt; <BR>&gt; To subscribe or unsubscribe via the World Wide Web, visit<BR>&gt; http://lists.linux.org.au/listinfo/linuxcprogramming<BR>&gt; or, via email, send a message with subject or body 'help' to<BR>&gt; linuxcprogramming-request@lists.linux.org.au<BR>&gt; <BR>&gt; You can reach the person managing the list at<BR>&gt; linuxcprogramming-owner@lists.linux.org.au<BR>&gt; <BR>&gt; When replying, please edit your Subject line so it is more specific<BR>&gt; than "Re: Contents of linuxCprogramming digest..."<BR>&gt; <BR>&gt; <BR>&gt; Today's Topics:<BR>&gt; <BR>&gt; 1. Re: Debugging a core dump (Zach)<BR>&gt; 2. Re: Debugging a core dump (DR. N. B. Venkat Nagasuri)<BR>&gt; 3. Re: Debugging a core dump (Zach)<BR>&gt; 4. Re: Questions regarding message queue (Paul Gearon)<BR>&gt; 5. Questions Regarding FIFO (Ludwig Isaac Lim)<BR>&gt; 6. Re: Questions Regarding FIFO (Steve Baker)<BR>&gt; 7. best ipc mechanism (vineeth saraschandran)<BR>&gt; 8. Re: best ipc mechanism (Kim Hawtin)<BR>&gt; 9. SPI driver development questions (Shi ZeQin)<BR>&gt; 10. SPI driver development questions (haqin)<BR>&gt; 11. zombie process... (Sayang Oin)<BR>&gt; 12. Re: zombie process... (Paul Gearon)<BR>&gt; <BR>&gt; <BR>&gt; ----------------------------------------------------------------------<BR>&gt; <BR>&gt; Message: 1<BR>&gt; Date: Thu, 26 Jul 2007 06:06:40 -0400<BR>&gt; From: Zach &lt;netrek@gmail.com&gt;<BR>&gt; Subject: Re: [LCP] Debugging a core dump<BR>&gt; To: "Linux C Programming" &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID:<BR>&gt; &lt;ecfa260c0707260306w6e49202ch518b86449197c766@mail.gmail.com&gt;<BR>&gt; Content-Type: text/plain; charset=ISO-8859-1; format=flowed<BR>&gt; <BR>&gt; I have had the same problem. Hope someone answers.<BR>&gt; <BR>&gt; Zach<BR>&gt; <BR>&gt; On 7/26/07, Ludwig Isaac Lim &lt;ludz_lim@yahoo.com&gt; wrote:<BR>&gt; &gt;<BR>&gt; &gt; Hi:<BR>&gt; &gt;<BR>&gt; &gt; I'm trying to debug a program which dumps a core file (<BR>&gt; &gt; I compiled the program with a "-g" flag). I tried setting<BR>&gt; &gt; the core size by using the following command:<BR>&gt; &gt;<BR>&gt; &gt; ulimit -c 1000<BR>&gt; &gt;<BR>&gt; &gt; I tried debugging it by :<BR>&gt; &gt; gdb &lt;program name&gt; &lt;name of the core&gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; gdb gives me the following error message :<BR>&gt; &gt; &lt;core file&gt; is not a core dump: file format not<BR>&gt; &gt; recognized.<BR>&gt; &gt;<BR>&gt; &gt; What is should be ideal size of a core dump for it be<BR>&gt; &gt; helpful in debugging a program?<BR>&gt; &gt;<BR>&gt; &gt; Many thanks!<BR>&gt; &gt;<BR>&gt; &gt; ludwig<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; ____________________________________________________________________________________<BR>&gt; &gt; Get the free Yahoo! toolbar and rest assured with the added security of spyware protection.<BR>&gt; &gt; http://new.toolbar.yahoo.com/toolbar/features/norton/index.php<BR>&gt; &gt;<BR>&gt; &gt; _______________________________________________<BR>&gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming List<BR>&gt; &gt;<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 2<BR>&gt; Date: Thu, 26 Jul 2007 03:41:46 -0700 (PDT)<BR>&gt; From: "DR. N. B. Venkat Nagasuri" &lt;venkat_ritch@yahoo.com&gt;<BR>&gt; Subject: Re: [LCP] Debugging a core dump<BR>&gt; To: Linux C Programming &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID: &lt;626153.67864.qm@web51109.mail.re2.yahoo.com&gt;<BR>&gt; Content-Type: text/plain; charset="iso-8859-1"<BR>&gt; <BR>&gt; Try<BR>&gt; ulimit -S -c 100000<BR>&gt; ./yourprogram (which is compiled using -g option)<BR>&gt; gdb -q yourprogram corefile<BR>&gt; <BR>&gt; Venkat<BR>&gt; <BR>&gt; Zach &lt;netrek@gmail.com&gt; wrote:<BR>&gt; I have had the same problem. Hope someone answers.<BR>&gt; <BR>&gt; Zach<BR>&gt; <BR>&gt; On 7/26/07, Ludwig Isaac Lim wrote:<BR>&gt; &gt;<BR>&gt; &gt; Hi:<BR>&gt; &gt;<BR>&gt; &gt; I'm trying to debug a program which dumps a core file (<BR>&gt; &gt; I compiled the program with a "-g" flag). I tried setting<BR>&gt; &gt; the core size by using the following command:<BR>&gt; &gt;<BR>&gt; &gt; ulimit -c 1000<BR>&gt; &gt;<BR>&gt; &gt; I tried debugging it by :<BR>&gt; &gt; gdb <BR>&gt; <BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; gdb gives me the following error message :<BR>&gt; &gt; is not a core dump: file format not<BR>&gt; &gt; recognized.<BR>&gt; &gt;<BR>&gt; &gt; What is should be ideal size of a core dump for it be<BR>&gt; &gt; helpful in debugging a program?<BR>&gt; &gt;<BR>&gt; &gt; Many thanks!<BR>&gt; &gt;<BR>&gt; &gt; ludwig<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; ____________________________________________________________________________________<BR>&gt; &gt; Get the free Yahoo! toolbar and rest assured with the added security of spyware protection.<BR>&gt; &gt; http://new.toolbar.yahoo.com/toolbar/features/norton/index.php<BR>&gt; &gt;<BR>&gt; &gt; _______________________________________________<BR>&gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming List<BR>&gt; &gt;<BR>&gt; <BR>&gt; _______________________________________________<BR>&gt; This is the Linux C Programming List<BR>&gt; : http://lists.linux.org.au/listinfo/linuxcprogramming List<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; Prof NB Venkateswarlu<BR>&gt; B.Tech(SVU), M.Tech(IIT-Kanpur), Ph.D(BITS,Pilani), PDF(U of Leeds,UK)<BR>&gt; Visit My Home at: www.ritchcenter.com/nbv<BR>&gt; <BR>&gt; <BR>&gt; ---------------------------------<BR>&gt; Shape Yahoo! in your own image. Join our Network Research Panel today!<BR>&gt; -------------- next part --------------<BR>&gt; An HTML attachment was scrubbed...<BR>&gt; URL: http://lists.linux.org.au/pipermail/linuxcprogramming/attachments/20070726/943d126f/attachment.htm <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 3<BR>&gt; Date: Thu, 26 Jul 2007 20:37:52 -0400<BR>&gt; From: Zach &lt;netrek@gmail.com&gt;<BR>&gt; Subject: Re: [LCP] Debugging a core dump<BR>&gt; To: "Linux C Programming" &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID:<BR>&gt; &lt;ecfa260c0707261737vf1128f6jde882aef027cc435@mail.gmail.com&gt;<BR>&gt; Content-Type: text/plain; charset=ISO-8859-1; format=flowed<BR>&gt; <BR>&gt; Thank you Dr. Nagasuri.<BR>&gt; <BR>&gt; Zach<BR>&gt; <BR>&gt; On 7/26/07, DR. N. B. Venkat Nagasuri &lt;venkat_ritch@yahoo.com&gt; wrote:<BR>&gt; &gt; Try<BR>&gt; &gt; ulimit -S -c 100000<BR>&gt; &gt; ./yourprogram (which is compiled using -g option)<BR>&gt; &gt; gdb -q yourprogram corefile<BR>&gt; &gt;<BR>&gt; &gt; Venkat<BR>&gt; &gt;<BR>&gt; &gt; Zach &lt;netrek@gmail.com&gt; wrote:<BR>&gt; &gt; I have had the same problem. Hope someone answers.<BR>&gt; &gt;<BR>&gt; &gt; Zach<BR>&gt; &gt;<BR>&gt; &gt; On 7/26/07, Ludwig Isaac Lim wrote:<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Hi:<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; I'm trying to debug a program which dumps a core file (<BR>&gt; &gt; &gt; I compiled the program with a "-g" flag). I tried setting<BR>&gt; &gt; &gt; the core size by using the following command:<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; ulimit -c 1000<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; I tried debugging it by :<BR>&gt; &gt; &gt; gdb<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; gdb gives me the following error message :<BR>&gt; &gt; &gt; is not a core dump: file format not<BR>&gt; &gt; &gt; recognized.<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; What is should be ideal size of a core dump for it be<BR>&gt; &gt; &gt; helpful in debugging a program?<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; Many thanks!<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; ludwig<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt;<BR>&gt; &gt; ____________________________________________________________________________________<BR>&gt; &gt; &gt; Get the free Yahoo! toolbar and rest assured with the added security of<BR>&gt; &gt; spyware protection.<BR>&gt; &gt; &gt;<BR>&gt; &gt; http://new.toolbar.yahoo.com/toolbar/features/norton/index.php<BR>&gt; &gt; &gt;<BR>&gt; &gt; &gt; _______________________________________________<BR>&gt; &gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming<BR>&gt; &gt; List<BR>&gt; &gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; _______________________________________________<BR>&gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming List<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; Prof NB Venkateswarlu<BR>&gt; &gt; B.Tech(SVU), M.Tech(IIT-Kanpur), Ph.D(BITS,Pilani), PDF(U of Leeds,UK)<BR>&gt; &gt; Visit My Home at: www.ritchcenter.com/nbv<BR>&gt; &gt;<BR>&gt; &gt; ________________________________<BR>&gt; &gt; Shape Yahoo! in your own image. Join our Network Research Panel today!<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; _______________________________________________<BR>&gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming<BR>&gt; &gt; List<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 4<BR>&gt; Date: Fri, 3 Aug 2007 00:36:22 -0500<BR>&gt; From: Paul Gearon &lt;gearon@ieee.org&gt;<BR>&gt; Subject: Re: [LCP] Questions regarding message queue<BR>&gt; To: Linux C Programming &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID: &lt;ACBD76F8-C4FB-479E-B95F-48B039666A95@ieee.org&gt;<BR>&gt; Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed<BR>&gt; <BR>&gt; Hi,<BR>&gt; <BR>&gt; Catching up on a backlog of email, I realized that I missed this one...<BR>&gt; <BR>&gt; On Jul 22, 2007, at 11:45 PM, Ludwig Isaac Lim wrote:<BR>&gt; &gt; Hi:<BR>&gt; &gt;<BR>&gt; &gt; I have 2 questions regarding message queue IPCs:<BR>&gt; &gt;<BR>&gt; &gt; 1) What is the standard way of generating a queue id? I<BR>&gt; &gt; usually do the following:<BR>&gt; &gt;<BR>&gt; &gt; key = ftok(&lt;name of the executable file&gt;,..);<BR>&gt; &gt; id = msgget(key,...);<BR>&gt; &gt;<BR>&gt; &gt; I can see problems arising when I move the executable<BR>&gt; &gt; to another directory.<BR>&gt; <BR>&gt; Actually, while this is theoretically bad, it will often work. The <BR>&gt; reason is because the key is generated from the inode of the file. <BR>&gt; If you do a simple mv (as opposed to a cp;rm) then the inode won't <BR>&gt; change, and hence the value will be the same.<BR>&gt; <BR>&gt; &gt; Does a better alternative exist? Is the code below much<BR>&gt; &gt; better<BR>&gt; &gt;<BR>&gt; &gt; touch(&lt;name of a temporary file&gt;);<BR>&gt; &gt;<BR>&gt; &gt; key = ftok(&lt;name of the temporary file&gt;):<BR>&gt; &gt;<BR>&gt; &gt; since "touch" was called prior to ftok, then mostly<BR>&gt; &gt; likely, calls to ftok will always be successfull.<BR>&gt; <BR>&gt; Well, there's no "touch" call (unless you use system(3)), but you can <BR>&gt; easily use creat(2) or open(2). This approach works just fine.<BR>&gt; <BR>&gt; What you're doing here is essentially registering a service for <BR>&gt; clients to connect to. You need some kind of "address" for this <BR>&gt; service, otherwise clients won't know how to find you. In the world <BR>&gt; of sockets, this is typically done by using a predefined port <BR>&gt; number. This is subject to collision, but for well known services <BR>&gt; the port number is reserved for that protocol only (eg. port 80 is <BR>&gt; http).<BR>&gt; <BR>&gt; You should be safe with a name like:<BR>&gt; /tmp/my.program.name.and.a.service.number.1234<BR>&gt; <BR>&gt; Anyone colliding with this name is just asking for <BR>&gt; difficulties. :-) Besides, the algorithm *can* lead to collisions <BR>&gt; anyway - though these are unlikely.<BR>&gt; <BR>&gt; &gt; Supposing somebody deletes the temporary file AFTER the<BR>&gt; &gt; message queue has been created. Will it affect the message<BR>&gt; &gt; queue?<BR>&gt; <BR>&gt; Not the queue itself, but now that the file is gone, it will not be <BR>&gt; possible for any clients to generate the same key again, even if they <BR>&gt; re-create the file (since the inode may be different). Any clients <BR>&gt; that are already connected to the shared memory won't notice a problem.<BR>&gt; <BR>&gt; &gt; 2) Is message queue always a better alternative to FIFO?<BR>&gt; &gt; The only foreseable problem with message queues if the<BR>&gt; &gt; message size larger than msgmax. When is FIFO preferred<BR>&gt; &gt; over message queues? It seems that FIFO is much better is<BR>&gt; &gt; the message size is very large. Any other opinion?<BR>&gt; <BR>&gt; FIFOs are good for transferring data from one process to another, <BR>&gt; particularly large amounts (though if it's big and needs to be <BR>&gt; updated, then consider shared memory, and if it's REALLY big then use <BR>&gt; mmap). Message queues are a little different:<BR>&gt; - Messages have limited size.<BR>&gt; - They can be received out of order (controlled with the message type)<BR>&gt; - Multiple processes can write to the queue.<BR>&gt; - Multiple processes can read from the queue (though this needs to be <BR>&gt; synchronized)<BR>&gt; <BR>&gt; In other words, message queues are good for sending messages. :-)<BR>&gt; <BR>&gt; Regards,<BR>&gt; Paul<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 5<BR>&gt; Date: Wed, 8 Aug 2007 05:52:01 -0700 (PDT)<BR>&gt; From: Ludwig Isaac Lim &lt;ludz_lim@yahoo.com&gt;<BR>&gt; Subject: [LCP] Questions Regarding FIFO<BR>&gt; To: linuxcprogramming@lists.linux.org.au<BR>&gt; Message-ID: &lt;495247.68184.qm@web31907.mail.mud.yahoo.com&gt;<BR>&gt; Content-Type: text/plain; charset=iso-8859-1<BR>&gt; <BR>&gt; Hi:<BR>&gt; <BR>&gt; According to Linux man pages fifo(7), when processes<BR>&gt; exchange data using a fifo, the kernel passes all data<BR>&gt; internaly without writing to a file.<BR>&gt; <BR>&gt; Supposing I have a "producer" process which passes data<BR>&gt; to "consumer" process using a fifo, and the consumer<BR>&gt; process is slower than the producer. Where does the kernel<BR>&gt; store the unprocessed messages? Assuming the kernel stored<BR>&gt; it in the memory. Is there a limitation on the size of the<BR>&gt; "backlog"? Is there something like message queue's MSGMAX<BR>&gt; and MSGMNB parameters?<BR>&gt; <BR>&gt; Many thanks,<BR>&gt; <BR>&gt; ludwig lim<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ____________________________________________________________________________________<BR>&gt; Building a website is a piece of cake. Yahoo! Small Business gives you all the tools to get online.<BR>&gt; http://smallbusiness.yahoo.com/webhosting <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 6<BR>&gt; Date: Wed, 08 Aug 2007 09:25:31 -0400<BR>&gt; From: Steve Baker &lt;ice@mama.indstate.edu&gt;<BR>&gt; Subject: Re: [LCP] Questions Regarding FIFO<BR>&gt; To: linuxcprogramming@lists.linux.org.au<BR>&gt; Message-ID: &lt;200708081325.l78DPVUa013032@mama.indstate.edu&gt;<BR>&gt; Content-Type: text/plain; charset=us-ascii<BR>&gt; <BR>&gt; Ludwig Isaac Lim &lt;ludz_lim@yahoo.com&gt; wrote:<BR>&gt; &gt; According to Linux man pages fifo(7), when processes<BR>&gt; &gt; exchange data using a fifo, the kernel passes all data<BR>&gt; &gt; internaly without writing to a file.<BR>&gt; &gt;<BR>&gt; &gt; Supposing I have a "producer" process which passes data<BR>&gt; &gt; to "consumer" process using a fifo, and the consumer<BR>&gt; &gt; process is slower than the producer. Where does the kernel<BR>&gt; &gt; store the unprocessed messages? Assuming the kernel stored<BR>&gt; &gt; it in the memory. Is there a limitation on the size of the<BR>&gt; &gt; "backlog"? Is there something like message queue's MSGMAX<BR>&gt; &gt; and MSGMNB parameters?<BR>&gt; <BR>&gt; When the producer produces more than the consumer processes, then it will<BR>&gt; simply block on writing to the fifo/pipe, or in otherwords, stop writing, when<BR>&gt; the pipe has become full. That is unless O_NONBLOCK was set when the<BR>&gt; fifo/pipe was opened, in which case it will write as much data as will fill<BR>&gt; the pipe and then return with an EAGAIN error (in which case the producer will<BR>&gt; need to re-write the data not written).<BR>&gt; <BR>&gt; Linux pipes are hardwired to be a single page in size (4096 bytes). However<BR>&gt; according to the man page (man 7 pipe), since kernel 2.6.11, fifo/pipes are<BR>&gt; hardwired to 64K in size. The fifo/pipe buffer size should be available in<BR>&gt; the external define PIPE_BUF, but it seems to still be 4096 in all the kernel<BR>&gt; sources &gt; 2.6.11 that I have.<BR>&gt; <BR>&gt; Read the man pages on pipe and fifo in section 7 for more complete<BR>&gt; information (ex: man 7 pipe fifo).<BR>&gt; <BR>&gt; - Steve<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 7<BR>&gt; Date: Fri, 31 Aug 2007 02:31:14 +0000<BR>&gt; From: vineeth saraschandran &lt;vineethsaraschandran@hotmail.com&gt;<BR>&gt; Subject: [LCP] best ipc mechanism<BR>&gt; To: &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID: &lt;BLU111-W139BB99C8B5E58B01B0A38CDCE0@phx.gbl&gt;<BR>&gt; Content-Type: text/plain; charset="iso-8859-1"<BR>&gt; <BR>&gt; Hi<BR>&gt; <BR>&gt; I know there are many different ipc mechanism to communicate between different process running on a same local machine.<BR>&gt; I am trying to figure out which one will be the best possible method for my application.<BR>&gt; <BR>&gt; The requirements for my application are:<BR>&gt; 1.I need to transfer around 40,000 bytes of data from one process to another. This data transfer will occur at a very frequent time interval.(Can I use local unix socket to transfer these data or shared memory is better approach?).<BR>&gt; <BR>&gt; <BR>&gt; _________________________________________________________________<BR>&gt; Download the latest version of Windows Live Messenger NOW!<BR>&gt; http://get.live.com/en-ie/messenger/overview<BR>&gt; -------------- next part --------------<BR>&gt; An HTML attachment was scrubbed...<BR>&gt; URL: http://lists.linux.org.au/pipermail/linuxcprogramming/attachments/20070831/8badceea/attachment-0001.htm <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 8<BR>&gt; Date: Mon, 03 Sep 2007 09:48:28 +0930<BR>&gt; From: Kim Hawtin &lt;kim.hawtin@adelaide.edu.au&gt;<BR>&gt; Subject: Re: [LCP] best ipc mechanism<BR>&gt; To: linuxcprogramming@lists.linux.org.au<BR>&gt; Message-ID: &lt;46DB52D4.7040101@adelaide.edu.au&gt;<BR>&gt; Content-Type: text/plain; charset=ISO-8859-1<BR>&gt; <BR>&gt; hi vineeth,<BR>&gt; <BR>&gt; vineeth saraschandran wrote:<BR>&gt; &gt; I know there are many different ipc mechanism to communicate between different process running on a same local machine.<BR>&gt; &gt; I am trying to figure out which one will be the best possible method for my application.<BR>&gt; &gt; <BR>&gt; &gt; The requirements for my application are:<BR>&gt; &gt; 1.I need to transfer around 40,000 bytes of data from one process to another. This data transfer will occur at a very frequent time interval.(Can I use local unix socket to transfer these data or shared memory is better approach?).<BR>&gt; <BR>&gt; sysv shared memory is one way, mmap'ing files, or UDP streams another<BR>&gt; <BR>&gt; have a look at the comp.lang.c faq;<BR>&gt; http://c-faq.com/<BR>&gt; <BR>&gt; this socket programming howto is in python, but the concepts are the same;<BR>&gt; http://www.amk.ca/python/howto/sockets/<BR>&gt; <BR>&gt; and some interesting stuff in the secure programing howto;<BR>&gt; http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/features.html<BR>&gt; <BR>&gt; cheers,<BR>&gt; <BR>&gt; kim<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 9<BR>&gt; Date: Thu, 20 Sep 2007 11:18:57 +0800 (CST)<BR>&gt; From: "Shi ZeQin" &lt;haqin@126.com&gt;<BR>&gt; Subject: [LCP] SPI driver development questions<BR>&gt; To: linuxcprogramming@lists.linux.org.au<BR>&gt; Message-ID:<BR>&gt; &lt;17048860.720121190258337440.JavaMail.coremail@bj126app62.126.com&gt;<BR>&gt; Content-Type: text/plain; charset="gbk"<BR>&gt; <BR>&gt; I have to develop an SPI device driver to make a at91sam9261 custom board "talk" to an at89s53 in order to receive data from it when needed.<BR>&gt; I'm using 2.6.14 kernel with support for the spi subsystem enabled. The tree below are files that come with kernel in driver/spi/.<BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 10<BR>&gt; Date: Thu, 20 Sep 2007 14:09:01 +0800<BR>&gt; From: "haqin" &lt;haqin@126.com&gt;<BR>&gt; Subject: [LCP] SPI driver development questions<BR>&gt; To: "Linux C Programming" &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID: &lt;200709201408591090423@126.com&gt;<BR>&gt; Content-Type: text/plain; charset="gb2312"<BR>&gt; <BR>&gt; Sorry, there may be some problem with my network that half of the letter I sent several hours ago is cut off.<BR>&gt; <BR>&gt; <BR>&gt; I have to develop a SPI device driver to make a at91sam9261 custom board "talk" to an at89s53 in order to receive data from it when needed.<BR>&gt; <BR>&gt; I'm using 2.6.14 kernel with support for the spi subsystem enabled. <BR>&gt; <BR>&gt; Could anyone tell me how to write a dirve base on the sp isubsystem support of the Linux kernel.<BR>&gt; <BR>&gt; Let me repeat. I wonder how to write a driver base on the spi subsystem, to communciate with a spi slave. <BR>&gt; Could any one give me an esay example that even without irq ?<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; Thank you all.<BR>&gt; <BR>&gt; Shi ZeQin<BR>&gt; -------------- next part --------------<BR>&gt; An HTML attachment was scrubbed...<BR>&gt; URL: http://lists.linux.org.au/pipermail/linuxcprogramming/attachments/20070920/3435b3cb/attachment-0001.htm <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 11<BR>&gt; Date: Wed, 14 Nov 2007 16:30:34 +0100<BR>&gt; From: Sayang Oin &lt;sayangoin@hotmail.com&gt;<BR>&gt; Subject: [LCP] zombie process...<BR>&gt; To: &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID: &lt;BAY128-W32E9FDB727DDECDA83FDC5A4810@phx.gbl&gt;<BR>&gt; Content-Type: text/plain; charset="iso-8859-1"<BR>&gt; <BR>&gt; Hello,<BR>&gt; <BR>&gt; can someone help me?<BR>&gt; <BR>&gt; I start a process via clone function but I don't know how to exit my child process without get a zombie...<BR>&gt; <BR>&gt; thank you in addvance<BR>&gt; Sayangoin<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; // source code.................<BR>&gt; <BR>&gt; #include &lt;signal.h&gt;#include &lt;stdio.h&gt;#include &lt;sys/types.h&gt;#include &lt;sys/wait.h&gt;#include &lt;sched.h&gt;#include &lt;unistd.h&gt;#include &lt;syscall.h&gt; // for syscall(SYS_getpid)#include &lt;syslog.h&gt;#include &lt;errno.h&gt;#include &lt;fcntl.h&gt;#include &lt;sys/stat.h&gt;<BR>&gt; #include "logCtrl.h"<BR>&gt; int transProcessId=0;char transStack[0x40000];<BR>&gt; pid_t mypid;<BR>&gt; int transProcess(){ mypid = syscall(SYS_getpid);<BR>&gt; printLog(logTRANS,"create transProc %i",mypid); <BR>&gt; return 0;}<BR>&gt; void startTransProcess(){ mypid = syscall(SYS_getpid);<BR>&gt; printLog(logMODUL1,"create transProc %i",mypid);<BR>&gt; if(transProcessId&gt;0) transProcessId=0; // transProcessId initialisieren<BR>&gt; transProcessId=clone(transProcess, &amp;transStack[sizeof(transStack)-10],CLONE_VM|CLONE_FILES|CLONE_FS , 0);<BR>&gt; if(transProcessId&gt;0){ printLog(logMODUL1,"transProc gestartet (PID: %d)",transProcessId); } else { printLog(logMODUL1,"transProc nicht startet (PID: %d)",transProcessId); }};<BR>&gt; void modul1(){ //printLog(logMODUL1,"Modul1"); if (!transProcessId) startTransProcess(); }<BR>&gt; <BR>&gt; int mainprog(){ printLog(logMAIN,"Programm start"); <BR>&gt; while(1) { modul1(); usleep(10*1000); } return 0; <BR>&gt; }<BR>&gt; <BR>&gt; // -------------------------------------------------------------------------// // -------------------------------------------------------------------------////// *******************************************************************************************////// *******************************************************************************************//int main (int argc,char *argv[]){ initLogCtrl();<BR>&gt; mainprog(); return 0; }<BR>&gt; _________________________________________________________________<BR>&gt; Windows Live Writer Beta - Ver?ffentlichen Sie Multimediainhalte in Ihrem Blog!<BR>&gt; http://get.live.com/betas/writer_betas<BR>&gt; -------------- next part --------------<BR>&gt; An HTML attachment was scrubbed...<BR>&gt; URL: http://lists.linux.org.au/pipermail/linuxcprogramming/attachments/20071114/839bdea3/attachment-0001.htm <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; Message: 12<BR>&gt; Date: Wed, 14 Nov 2007 13:53:07 -0600<BR>&gt; From: "Paul Gearon" &lt;gearon@ieee.org&gt;<BR>&gt; Subject: Re: [LCP] zombie process...<BR>&gt; To: "Linux C Programming" &lt;linuxcprogramming@lists.linux.org.au&gt;<BR>&gt; Message-ID:<BR>&gt; &lt;a25ac1f0711141153i5e5c8661g5c3e1385726052e0@mail.gmail.com&gt;<BR>&gt; Content-Type: text/plain; charset=ISO-8859-1<BR>&gt; <BR>&gt; I should point out that you shouldn't be using system calls to do<BR>&gt; simple things like getting your pid. That's what glibc is for. It<BR>&gt; wraps all those system calls up into standard POSIX functions that you<BR>&gt; *should* be calling. In this case, use getpid(2). For details type:<BR>&gt; man getpid<BR>&gt; <BR>&gt; As for your zombie problem, they're waiting to be reaped. The parent<BR>&gt; can choose to read the exit status at any time, so the OS *must* keep<BR>&gt; this info until the parent has collected it. This is called reaping.<BR>&gt; It's a simple matter of calling one of the synchronous wait()<BR>&gt; functions. On Linux these are wait, waitpid and waitid. See wait(2)<BR>&gt; for the details:<BR>&gt; man 2 wait<BR>&gt; <BR>&gt; Regards,<BR>&gt; Paul<BR>&gt; <BR>&gt; On Nov 14, 2007 9:30 AM, Sayang Oin &lt;sayangoin@hotmail.com&gt; wrote:<BR>&gt; &gt;<BR>&gt; &gt; Hello,<BR>&gt; &gt;<BR>&gt; &gt; can someone help me?<BR>&gt; &gt;<BR>&gt; &gt; I start a process via clone function but I don't know how to exit my child<BR>&gt; &gt; process without get a zombie...<BR>&gt; &gt;<BR>&gt; &gt; thank you in addvance<BR>&gt; &gt; Sayangoin<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; // source code.................<BR>&gt; &gt;<BR>&gt; &gt; #include &lt;signal.h&gt;<BR>&gt; &gt; #include &lt;stdio.h&gt;<BR>&gt; &gt; #include &lt;sys/types.h&gt;<BR>&gt; &gt; #include &lt;sys/wait.h&gt;<BR>&gt; &gt; #include &lt;sched.h&gt;<BR>&gt; &gt; #include &lt;unistd.h&gt;<BR>&gt; &gt; #include &lt;syscall.h&gt; // for syscall(SYS_getpid)<BR>&gt; &gt; #include &lt;syslog.h&gt;<BR>&gt; &gt; #include &lt;errno.h&gt;<BR>&gt; &gt; #include &lt;fcntl.h&gt;<BR>&gt; &gt; #include &lt;sys/stat.h&gt;<BR>&gt; &gt;<BR>&gt; &gt; #include "logCtrl.h"<BR>&gt; &gt; int transProcessId=0;<BR>&gt; &gt; char transStack[0x40000];<BR>&gt; &gt; pid_t mypid;<BR>&gt; &gt;<BR>&gt; &gt; int transProcess(){<BR>&gt; &gt;<BR>&gt; &gt; mypid = syscall(SYS_getpid);<BR>&gt; &gt; printLog(logTRANS,"create transProc %i",mypid);<BR>&gt; &gt; return 0;<BR>&gt; &gt; }<BR>&gt; &gt; void startTransProcess(){<BR>&gt; &gt;<BR>&gt; &gt; mypid = syscall(SYS_getpid);<BR>&gt; &gt; printLog(logMODUL1,"create transProc %i",mypid);<BR>&gt; &gt; if(transProcessId&gt;0) transProcessId=0; // transProcessId initialisieren<BR>&gt; &gt; transProcessId=clone(transProcess,<BR>&gt; &gt; &amp;transStack[sizeof(transStack)-10],CLONE_VM|CLONE_FILES|CLONE_FS , 0);<BR>&gt; &gt; if(transProcessId&gt;0){<BR>&gt; &gt; printLog(logMODUL1,"transProc gestartet (PID: %d)",transProcessId);<BR>&gt; &gt; }<BR>&gt; &gt; else {<BR>&gt; &gt; printLog(logMODUL1,"transProc nicht startet (PID: %d)",transProcessId);<BR>&gt; &gt; }<BR>&gt; &gt; };<BR>&gt; &gt;<BR>&gt; &gt; void modul1()<BR>&gt; &gt; {<BR>&gt; &gt; //printLog(logMODUL1,"Modul1");<BR>&gt; &gt;<BR>&gt; &gt; if (!transProcessId) startTransProcess();<BR>&gt; &gt;<BR>&gt; &gt; }<BR>&gt; &gt;<BR>&gt; &gt; int mainprog()<BR>&gt; &gt; {<BR>&gt; &gt; printLog(logMAIN,"Programm start");<BR>&gt; &gt; while(1) {<BR>&gt; &gt;<BR>&gt; &gt; modul1();<BR>&gt; &gt;<BR>&gt; &gt; usleep(10*1000);<BR>&gt; &gt;<BR>&gt; &gt; }<BR>&gt; &gt;<BR>&gt; &gt; return 0;<BR>&gt; &gt; }<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; //<BR>&gt; &gt; -------------------------------------------------------------------------<BR>&gt; &gt; //<BR>&gt; &gt; // -------------------------------------------------------------------------<BR>&gt; &gt; //<BR>&gt; &gt; //<BR>&gt; &gt; //<BR>&gt; &gt; *******************************************************************************************<BR>&gt; &gt; //<BR>&gt; &gt; //<BR>&gt; &gt; //<BR>&gt; &gt; *******************************************************************************************<BR>&gt; &gt; //<BR>&gt; &gt; int main (int argc,char *argv[]){<BR>&gt; &gt;<BR>&gt; &gt; initLogCtrl();<BR>&gt; &gt; mainprog();<BR>&gt; &gt; return 0;<BR>&gt; &gt;<BR>&gt; &gt; }<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt; ________________________________<BR>&gt; &gt; Schon gesehen? Tolle Bilder von Sarah Connor gibt es hier! Live Search<BR>&gt; &gt; _______________________________________________<BR>&gt; &gt; This is the Linux C Programming List<BR>&gt; &gt; : http://lists.linux.org.au/listinfo/linuxcprogramming List<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ------------------------------<BR>&gt; <BR>&gt; _______________________________________________<BR>&gt; linuxCprogramming mailing list<BR>&gt; linuxCprogramming@lists.linux.org.au<BR>&gt; http://lists.linux.org.au/listinfo/linuxcprogramming<BR>&gt; <BR>&gt; <BR>&gt; End of linuxCprogramming Digest, Vol 2, Issue 1<BR>&gt; ***********************************************<BR><BR><br /><hr />Machen Sie Ihre E-Mail-Kontakte zu Messenger-Freunden! <a href='http://redirect.gimas.net/?cat=hmtl&n=M1007AI&d=http://messenger.live.de/ersteschritte_adressimport.html' target='_new'>Einfacher Adressimport!</a></body>
</html>