Using fread on popen is slow










0















I have an application that collects the logs files and writes on the socket(Similar to the user downloading the files via the Web browser).



Below is the core logic that does this.



FILE *fp = NULL;
char au1Data[1500];

fp = popen("script.sh", "r");

while ((i4Count = fread(au1Data, 1, sizeof(au1Data), fp)) > 0)


for (size_to_send = i4Count; size_to_send > 0; )

sent = write(web_socket_fd,au1Data,i4Count);
size_to_send -= sent;





The script.sh takes care of collecting the logs and preparing a tar of
the files.



Using the fread to read the info from popen. This information is written to the socket.



I am able to achieve the functionality. But the read operation seems to be very slow.



For the completion of this process, It takes approx ~20Mins to download a 9MB file.



Am confused as what is causing so much of delay.










share|improve this question



















  • 3





    May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

    – Some programmer dude
    Nov 12 '18 at 13:52












  • Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

    – Scheff
    Nov 12 '18 at 14:21











  • @Scheff That was typo error. Have edited the pseudo-code.

    – Kniwx
    Nov 13 '18 at 5:58











  • The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

    – Kniwx
    Nov 14 '18 at 17:43
















0















I have an application that collects the logs files and writes on the socket(Similar to the user downloading the files via the Web browser).



Below is the core logic that does this.



FILE *fp = NULL;
char au1Data[1500];

fp = popen("script.sh", "r");

while ((i4Count = fread(au1Data, 1, sizeof(au1Data), fp)) > 0)


for (size_to_send = i4Count; size_to_send > 0; )

sent = write(web_socket_fd,au1Data,i4Count);
size_to_send -= sent;





The script.sh takes care of collecting the logs and preparing a tar of
the files.



Using the fread to read the info from popen. This information is written to the socket.



I am able to achieve the functionality. But the read operation seems to be very slow.



For the completion of this process, It takes approx ~20Mins to download a 9MB file.



Am confused as what is causing so much of delay.










share|improve this question



















  • 3





    May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

    – Some programmer dude
    Nov 12 '18 at 13:52












  • Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

    – Scheff
    Nov 12 '18 at 14:21











  • @Scheff That was typo error. Have edited the pseudo-code.

    – Kniwx
    Nov 13 '18 at 5:58











  • The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

    – Kniwx
    Nov 14 '18 at 17:43














0












0








0








I have an application that collects the logs files and writes on the socket(Similar to the user downloading the files via the Web browser).



Below is the core logic that does this.



FILE *fp = NULL;
char au1Data[1500];

fp = popen("script.sh", "r");

while ((i4Count = fread(au1Data, 1, sizeof(au1Data), fp)) > 0)


for (size_to_send = i4Count; size_to_send > 0; )

sent = write(web_socket_fd,au1Data,i4Count);
size_to_send -= sent;





The script.sh takes care of collecting the logs and preparing a tar of
the files.



Using the fread to read the info from popen. This information is written to the socket.



I am able to achieve the functionality. But the read operation seems to be very slow.



For the completion of this process, It takes approx ~20Mins to download a 9MB file.



Am confused as what is causing so much of delay.










share|improve this question
















I have an application that collects the logs files and writes on the socket(Similar to the user downloading the files via the Web browser).



Below is the core logic that does this.



FILE *fp = NULL;
char au1Data[1500];

fp = popen("script.sh", "r");

while ((i4Count = fread(au1Data, 1, sizeof(au1Data), fp)) > 0)


for (size_to_send = i4Count; size_to_send > 0; )

sent = write(web_socket_fd,au1Data,i4Count);
size_to_send -= sent;





The script.sh takes care of collecting the logs and preparing a tar of
the files.



Using the fread to read the info from popen. This information is written to the socket.



I am able to achieve the functionality. But the read operation seems to be very slow.



For the completion of this process, It takes approx ~20Mins to download a 9MB file.



Am confused as what is causing so much of delay.







c popen fread






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 5:57







Kniwx

















asked Nov 12 '18 at 13:49









KniwxKniwx

344




344







  • 3





    May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

    – Some programmer dude
    Nov 12 '18 at 13:52












  • Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

    – Scheff
    Nov 12 '18 at 14:21











  • @Scheff That was typo error. Have edited the pseudo-code.

    – Kniwx
    Nov 13 '18 at 5:58











  • The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

    – Kniwx
    Nov 14 '18 at 17:43













  • 3





    May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

    – Some programmer dude
    Nov 12 '18 at 13:52












  • Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

    – Scheff
    Nov 12 '18 at 14:21











  • @Scheff That was typo error. Have edited the pseudo-code.

    – Kniwx
    Nov 13 '18 at 5:58











  • The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

    – Kniwx
    Nov 14 '18 at 17:43








3




3





May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

– Some programmer dude
Nov 12 '18 at 13:52






May I suggest you do some rubber duck debugging? Then perhaps you could find a flaw with the inner loop. And if what you're showing is just pseudo-code, then please try to create a Minimal, Complete, and Verifiable Example to show us. And of course read about how to ask good questions, as well as this question checklist.

– Some programmer dude
Nov 12 '18 at 13:52














Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

– Scheff
Nov 12 '18 at 14:21





Following the advice of @Someprogrammerdude, I looked at the inner loop a bit closer: size_to_send > 0 is used as condition but size_to_send is never updated inside this loop. It takes approx ~20Mins to download a 9MB file. I still don't understand why the inner loop may terminate at all (but gave up for now).

– Scheff
Nov 12 '18 at 14:21













@Scheff That was typo error. Have edited the pseudo-code.

– Kniwx
Nov 13 '18 at 5:58





@Scheff That was typo error. Have edited the pseudo-code.

– Kniwx
Nov 13 '18 at 5:58













The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

– Kniwx
Nov 14 '18 at 17:43






The issue is not with the above code. It was the script that got invoked from popen that was causing the issue.

– Kniwx
Nov 14 '18 at 17:43













0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263569%2fusing-fread-on-popen-is-slow%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263569%2fusing-fread-on-popen-is-slow%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Use pre created SQLite database for Android project in kotlin

Darth Vader #20

Ondo