cstringlow-levellow-level-iolow-level-code

How can I write a string to a file using the low-level write() function?


For example, I am able to write the contents of an input file to and output file with:

char buffer[1024]; // character buffer
char userInput[1024]; // for user input
char *p;
char *q;
int n;
int input_file1; // file descriptor for file 1
int input_file2; // file descriptor for file 2
int output_file; // file descriptor for output_file

    while((n = read(input_file1, buffer, sizeof(buffer))) > 0)
    {
    progress("entered first while loop");
        if((write(output_file, buffer, n)) < 0)
        {
            progress("couldn't write to output within while loop 1");
            perror(argv[3]);
            close(input_file1);
            close(input_file2);
            close(output_file);
            exit(1);
        }
    }

I also have some user input:

printf("\nEnter text then hit enter: ");
q = fgets(userInput, sizeof(userInput), stdin);

I want to append the user input to the same output file using write();

How can I do this?

----- update ---- works with

if(strcmp(argv[1], "-") == 0) // use standard-in for input file 1
    {
        progress("file 1 detected as \"-\": using std input");
        p = fgets(userInput, sizeof(userInput), stdin);
        if (write(output_file, userInput, sizeof(p)) < 0) {
            progress("write from stdin to output file failed");
            perror(argv[4]);
            exit(1);
        }
        progress("wrote from stdin to output file");
    }

Solution

  • just you make the same thing. but you do not have to close the file in the first while.

    and the get the input from the user (stdin) and then write it to the file with write() function

    q = fgets(userInput, sizeof(userInput), stdin);
    write(output_file, userInput, strlen(userInput));
    close(output_file);