To begin with FYI, I really struggled with the question before asking to simplify as much as I can around 1 hour and to increase the code's readability I neglect error checks.
I intend to communicate parent and child using PIPE. In the following program I do traverse given path and its subdirectories and calculate total size of what are included in the current directory individually. Upon completion, I write each directory's PID, size and path into `COMMON_FIFO` which will be read in `main()` eventually. My questions are following that
Can data corruption occur while writing `FIFO` cuz of its atomic size since the main process wait for all children to be reaped. Doesn't it? If yes, how can I solve the problem?
Is the written information(each directory's PID, size and path) guaranteed post-order since each directory is gone into orderly? If no, how can it be solved?
Let's modify the prior code's `walk_dir_and_calculate_sizes` function in which each directory's process calculates total sizes what the directory includes(regular files) to `WITH_PIPE_walk_dir_and_calculate_sizes` in which I intend to transmit each subdirectory's calculated size to its parent by using PIPE. For example, Directorey A includes B which includes C. Invidially `A's size is 10kb, B's is 5kb, C's 1kb`. In walk_dir_and_calculate_sizes gives result in `A's size is 10kb, B's is 5kb, C's 1kb` however in WITH_PIPE_walk_dir_and_calculate_sizes it yields `A's size is 16kb, B's is 6kb, C's 1kb` since C doesn't have child(subdirectory).
But in `WITH_PIPE_walk_dir_and_calculate_sizes` function I get *Bad File Descriptor* error while closing read end before writing to pipe. I'm really in dilemma. Why is my idea wrong? How can my intent be achieved Of course I'm not experienced guy, I can have another mistakes or oversights, please inform me.
Thanks a lot.
@Edit, by the way, I overlooked the point that I'm doing only one pipe as thinking one directory has one subdirectory BUT a directory can of course have more than one subdirectory. So I think we need more pipes to a parent.
Last edited by beginnerboy; 03-26-2019 at 01:49 PM..
If it's saying bad file descriptor it probably means it. Without seeing your actual code, I can't tell why you're closing a bad file descriptor, you should print the FD's to stderr when you open a pipe, and print them to stderr again when you try and close it to see what's going on. But I have some further comments.
fork() is pointless. Disks don't multithread. Forcing it to read 19 directories at once will make your disk run 19 times slower. You already benefit from the caching and read-ahead built into the OS, too.
Second, there's a system function for what you want to do, ftw() It operates depth-first, so every time you see a new second-level folder, you'll know everything afterwards will be within that folder until it leaves.
Last edited by Corona688; 03-26-2019 at 03:18 PM..
If you really wanted to do IPC between processes just to count directories, though, shared memory beats pipes IMO. mmap() an anonymous segment, and each fork()ed process will have access to it. Give each child a unique index to mess with so they don't stomp on each other, wait() for each child to quit, and tada.
Hi,
I have a script that runs a tar command to standard out then pipes to a gzip:
tar cfE - * | gzip -c > OUT.gz
At the moment, even if the tar fails (e.g. because of lack of disk space), the gzip still runs successfully.
Is there a way to make the whole line exit with a non-zero error... (6 Replies)
I'm new to scripting, and this forum has been invaluable in helping me out. I'm hoping I can get some personal help now though.
I have a korn script that takes a list of servers and either telnets or sshs into it (only some are set up for ssh). What I'm doing now is trying to telnet first, and... (10 Replies)
Hi ,
I am using below code to list the 6th,7th and 8th field of the file
ls -lrt test | awk '{print $6,$7,$8}'
output:
Nov 21 19:34
Now the problem here is that I want to do it without the usage of pipes as its now allowed in my production environment
Please let me know... (6 Replies)
Hello
while doing sftp over server "A" , i am getting a broken pipe error i.e
cat: write error: Broken pipe
what does that mean? please let me know if you want any other info on this.. (3 Replies)
hi guys, o have a big error
in this program but i cant solve
someone ?!
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv){
int cont = 2, posicao;
char geraArquivo= "|cat>>", espaco=" ";
char nomeArquivo, comando,... (11 Replies)
All,
I am using the below code
The C code :
if ((fp2=fopen(szout_fname,"r"))==NULL)
{
sprintf(stream_ptr1,"cat %s | sort -t, -rn -k 11,11 | awk -F\",\" '{ \
if ( \$3 ==\"%s\" ) {print... (0 Replies)
Hello,
Could any one help me how to find the Disk Usage for all the files in the running directory and the sub directories without the disk usage of the directory. I mean to say, i need only the file names without the size of the directories.
See, i used this command
du -a .|sort... (3 Replies)
Hi,
I am working on AIX 5.3 . I have client-server program which is in ProC.while sending packet to server i am getting error as broken pipe and program exiting.
please help?/? (1 Reply)
how can I find cpu usage memory usage swap usage and
I want to know CPU usage above X% and contiue Y times and memory usage above X % and contiue Y times
my final destination is monitor process
logical volume usage above X % and number of Logical voluage above
can I not to... (3 Replies)