stdout/stdin + flushing buffers


 
Thread Tools Search this Thread
Top Forums Programming stdout/stdin + flushing buffers
# 1  
Old 09-24-2008
stdout/stdin + flushing buffers

Hi all

I've run into a snag in a program of mine where part of what I entered in at the start of run-time, instead of the current value within printf() is being printed out.

After failing with fflush() and setbuf(), I tried the following approach

Code:
void BufferFlusher()
{
   int in=0;
   char c;

   while( (in = getchar()) != NULL)
   {
       c = (char) in;
       c = NULL;
       fputc((int)c,stdin);
   }


}

however this has not improved things (even with replacing getchar() with fgetc(stdin) ).

Thanks heaps in advance
# 2  
Old 09-24-2008
It's not clear (to me) what you are trying to do here: why can you not use fflush to flush a buffer?
Some immediate observations, though:
getchar returns EOF if nothing is read, rather than a NULL pointer, so don't compare its return value to NULL.
Writing to stdin is unlikely to succeed -- check the return value of fputc.
# 3  
Old 09-25-2008
Requirements unclear

First off I'm not sure what you're trying to do here but to reinforce what has already been stated by spirtle the code needs to be rectified.
There's no need to cast the int read from standard input to char so the char c; c = (char) in; and c = NULL; statements are unneccessary as this one suffices.
Code:
int in;

The terminal condition for the while loop should check for EOF instead of NULL
Code:
while((in = getchar()) != EOF)

and fputc() writes to stdout NOT stdin
Code:
fputc(in, stdout);

# 4  
Old 09-28-2008
Ok, I will try and re-specify my problem

Basically Im trying to get a simple prompt being displayed (via printf() ) and have a user respond to it accordingly (via scanf() ).

However this is difficult because the prompt is not being displayed, and previous input I entered in (via another printf() and scanf() ) seems to appear in its place.

Does this make sense
# 5  
Old 09-29-2008
Question Need more info

Your code has neither the printf() nor scanf() functions so I am still at a loss to understand what exactly is going on here. You need to attach the entire code and explain what it is doing otherwise with the scant information presented in your post it's not making any sense.
# 6  
Old 09-29-2008
Hi guys

Please find my code in the attachments

Ok the aim of my script is to do the following

a) Prompt the user to enter in a folder they wish to browse to

b) Rename the folder via the use of a prompt and a system() call to mv

c) Within the folder, replace all subfolder names containing a certain string with a new string

d) Copy the renamed folder and the modified subfolder names to an external location

e) At the destination, repeat c)

I am experiencing my prompting issue at b).

This is the line of code at b)

Code:
new_src = (char *)malloc(20);
printf("\nEnter new directory name: ");
scanf("%s",new_src);

After debugging, I have found that new_src contains a portion of the char *ptr value I entered into a), which then mysteriously gets printed out at the printf() in b) at the scanf() part


FYI I used multiple calls to printf("\n===================") yesterday before b) and it seemed to alleviate the issue, however this came from a trial and error, rather than a methodical approach

The entire script is in the word doc file. You can find the functions individually in the text files

Is this enough for you guys to work with ?
# 7  
Old 09-30-2008
as far as i know, all functions using a FILE * do buffered I/O. This means, that data is not written immediately, but when the kernel thinks, it is the right time. This is normally the case, when a line is finished (when there is a \n). But a fflush() does also the trick. In your case you have to put an fflush(stdout); between printf() and scanf(). Any other location does not help, because the scanf is the location, where your program waits for user input.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[stdin / stdout] Strategies for redirecting outputs

Well.. let's say i need to write a pretty simple script. In my script i have 2 variables which can have value of 0 or 1. $VERBOSE $LOG I need to implement these cases: ($VERBOSE = 0 && $LOG = 0) => ONLY ERROR output (STDERR to console && STDOUT to /dev/null) ($VERBOSE = 1... (5 Replies)
Discussion started by: Marmz
5 Replies

2. UNIX for Advanced & Expert Users

How to set font color for STDIN,STDOUT and STDERR?

I want to differentiate the STDOUT and STDERR messages in my terminal . If a script or command is printing a message in terminal I want to differentiate by colors, Is it possible ? Example: $date Wed Jul 27 12:36:50 IST 2011 $datee bash: datee: command not found $alias ls alias... (2 Replies)
Discussion started by: ungalnanban
2 Replies

3. UNIX for Dummies Questions & Answers

STDIN and STDOUT

Hallo, i have a script like: if ;then echo "OK" else echo "ERROR $2 is missing" fi; if ;then touch $2 fi; if ;then cat $1 | grep xy > $2 (1 Reply)
Discussion started by: eightball
1 Replies

4. Programming

read and write stdin/stdout in unix

Hi, i am using the below program to read from the standard input or to write to standard out put. i know that using highlevel functions this can be done better than what i have done here. i just want to know is there any other method by which i find the exact number of characters ( this... (3 Replies)
Discussion started by: MrUser
3 Replies

5. Programming

Controlling a child's stdin/stdout (not working with scp)

All, Ok...so I know I *should* be able to control a process's stdin and stdout from the parent by creating pipes and then dup'ing them in the child. And, this works with all "normal" programs that I've tried. Unfortunately, I want to intercept the stdin/out of the scp application and it seems... (9 Replies)
Discussion started by: DreamWarrior
9 Replies

6. Shell Programming and Scripting

Redirecting stdin/stdout to/from command from/to string

Hi, I am working on a project where I have to generate and execute nasm code on-the-fly. I generate the code in a file program.asm and then execute it.This output is to stdout which i redirect to an output file which i read back to compare results: system("nasm -f elf program.asm >... (5 Replies)
Discussion started by: doc_cypher
5 Replies

7. Shell Programming and Scripting

can't close stdin/stdout in shell

#!/bin/sh exec 0</dev/null exec 1>/dev/null ls -l /proc/self/fd >&2 produces total 0 lr-x------ 1 tyler users 64 Feb 18 10:38 0 -> /proc/7886/fd lrwx------ 1 tyler users 64 Feb 18 10:38 1 -> /dev/pts/4 lrwx------ 1 tyler users 64 Feb 18 10:38 2 -> /dev/pts/4 I've verified the shell is... (10 Replies)
Discussion started by: Corona688
10 Replies

8. UNIX for Dummies Questions & Answers

Redirect stdin stdout to multiple files

Hi, i know how to a) redirect stdout and stderr to one file, b) and write to two files concurrently with same output using tee command Now, i want to do both the above together. I have a script and it should write both stdout and stderr in one file and also write the same content to... (8 Replies)
Discussion started by: ysrini
8 Replies

9. Shell Programming and Scripting

Wrapper script for image deployment - stdin/stdout - named pipes and the like

Hi everyone, first post here. Anyone who isn't interested in the background, press pagedown :). I sometimes need to make scripts for little things I need in the infrastructure at the company I work at. Currently I am trying to make a wrapper script for a proprietary image-deployment program.... (2 Replies)
Discussion started by: andreas.ericson
2 Replies

10. Programming

C++ How to use pipe() & fork() with stdin and stdout to another program

Hi, Program A: uses pipe() I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using: * child -> dup2(fd, STDOUT_FILENO); -> execl("/path/PROGRAM B", "PROGRAM B", NULL); * parent -> char line; -> read(fd, line, 100); Question:... (2 Replies)
Discussion started by: vvaidyan
2 Replies
Login or Register to Ask a Question