FIFO possible blocking or unknown error

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions FIFO possible blocking or unknown error
# 1  
Old 08-12-2010
FIFO possible blocking or unknown error

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

1. The problem statement, all variables and given/known data:

Create a chat program using two FIFOs one for writing and the other for reading. The problem is something blocks or keep the program from running. My first time doing this with FIFO


2. Relevant commands, code, scripts, algorithms:

open(), mkfifo, etc.


3. The attempts at a solution (include all code and scripts):

Here is the code:
Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <signal.h>

/* Write to the server FIFO */
#define FIFOSERVER        "serverfifo"
/* Read from client FIFO */
#define FIFOCLIENT        "clientfifo"

extern int errno;

void chatty()
{
    pid_t child_pid;
    /* Client and server fd are the file descriptors */
    int serverFD, clientFD, status;
    char buffer[BUFSIZ];

    /* Remove previous FIFOs */
    unlink(FIFOSERVER);
    unlink(FIFOCLIENT);

    // Create client and server FIFOs

    /* Create client FIFO and handle error generation*/
    if ((mkfifo(FIFOCLIENT, 0766)) < 0) {
        printf("%s", strerror (errno));
        exit(1);
    }

    /* Create server FIFO and handle error generation*/
    if ((mkfifo(FIFOSERVER, 0766)) < 0) {
        printf("%s", strerror (errno));
        exit(1);
    }

    /* Parent Process shall write to the serverfifo */

    /* Open the serverfifo for writing and handle any error generation */
    if ((serverFD = open(FIFOSERVER, O_WRONLY)) < 0) {
        printf("%s", strerror (errno));
        exit(1);
    }


    /* Create child process */

    if ((child_pid = fork() ) < 0) {
        printf("%s", strerror (errno));
        exit(1);
    }

    /* The child process shall read from the clientfifo */

    if (child_pid == 0) {

        int x;

        /* Open the clientfifo for reading and handle any error generation */
        if ((clientFD = open(FIFOCLIENT, O_RDONLY)) < 0) {
            printf("%s", strerror (errno));
            exit(1);
        }

        /* Read from the clientfifo and write to standard out */
        while ((x = read(serverFD, buffer, sizeof(buffer))) > 0) {
            write(1, buffer, x);
        }

        /* Close clientFifo file descriptor */
        close(clientFD);

        _exit(0);

    }

    int x;
    /* Parent reads from standard input and writes to serverfifo */
    while ((x = read(0, buffer, sizeof(buffer))) > 0)
        write(serverFD, buffer, x);

    waitpid(child_pid, &status, WNOHANG);

    close(serverFD);
    exit(0);


}

int main(int argc, char *argv[]) {

    printf("Hey");
    int x;

    char fifoNames[3];

    /* No command-line arguments present */
    if (argc == 1) {

        printf("1");

        /* Run chatty */
        chatty();
    }

    /* Command-line arguments present */
    else if (argc > 1) {

        /* Grab the command-line arguments */
        for( x = 1; x < argc; x++ ) {

        fifoNames[x] = *argv[x];

    }
        /* Redefine FIFOSERVER and FIFOCLIENT and call chatty() */
    #undef FIFOSERVER
    #undef FIFOCLIENT
    #define FIFOSERVER fifoNames[1]
    #define FIFOCLIENT fifoNames[2]

        /* Run chatty */
        chatty();
    }

    return 0;
}


4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

Eastern Michigan University, Ypsilanti, MI US Aby Tehranipour COSC421 link through secure site u wont have access too

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).
# 2  
Old 08-12-2010
Code:
...
    #undef FIFOSERVER
    #undef FIFOCLIENT
    #define FIFOSERVER fifoNames[1]
    #define FIFOCLIENT fifoNames[2]

#define's are, more or less, literal text replacement operators that happen even before the program is compiled.

For example:

Code:
#define A  FUNCTION_A

A();

void function_c()
{
        A();
}

#undef A
#define A FUNCTION_B
A();

function_c();

When you compile it, the first step it does is preprocessing, which does the text replacement, reducing the code to this:

Code:
FUNCTION_A();

void function_c()
{
        A();
}

FUNCTION_B();

function_c();

meaning function_c calls FUNCTION_A, not FUNCTION_B. So, this text replacement cannot do any logic at runtime. All decisions it makes happen right when the code is compiled. If you want to change what files your function opens, pass it parameters so you can tell it so:
Code:
void chatty(const char *rdfile, const char *wrfile)
{
        ...
}

...


chatty(fifonames[0], fifonames[1]);

...

chatty(fifonames[1], fifonames[0]);

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Getting unknown operator error while using a function

Hi, I wrote a function for the first time and not able to get the desired result. I have requirement to execute 10 queries. For this i wrote a function like below. function Command { typeset var SOL; if ; then CONNECTION="${CONNECTION} -e -time"; else SOL="`nzsql ${CONNECTION} -c... (8 Replies)
Discussion started by: Samah
8 Replies

2. Programming

Which are blocking and non-blocking api's in sockets in C ?

among the below socket programming api's, please let me know which are blocking and non-blocking. socket accept bind listen write read close (2 Replies)
Discussion started by: VSSajjan
2 Replies

3. Solaris

SMTP Server 550 5.1.1 User unknown Error

Hello All, I am currently running a Solaris 10 machine as inbound SMTP server i.e. bringing Emails from outside into our company. In /var/spool/mqueue , I have mails that are pending for the past 4-5 days. They are not being delivered and are causing my mount point size to increase. Error... (0 Replies)
Discussion started by: Junaid Subhani
0 Replies

4. UNIX for Advanced & Expert Users

Using SFTP Error Server Unknown

Not sure if this is the right forum and I apologies if not. I use Expression web to update our website on a UNIX server using SFTP. I use the same laptop, software, that works fine when at home, but when I travel, I tend to get a unknown server error. I am suspecting that it has something to do... (2 Replies)
Discussion started by: ae3799t
2 Replies

5. Programming

Help Unknown Syntax Error

Please excuse me if this is an easy fix, for I am new to Unix and C '/problem1.c: line2: syntax error near unexpected token ` '/problem1.c: line2: `main() and for one program it has : command not found2: (above the syntax error) As mentioned this is in C not C++, I have complied all... (3 Replies)
Discussion started by: apolo93
3 Replies

6. Shell Programming and Scripting

Unknown error - ``' unmatched

Hi Guys, I get the error while running below commands. Earlier the command used to execute, but after enclosing them in a function, the error is occuring backupPath=`echo $folderName | sed -e 's,/vobs/dte/itgClient/client/RegressionTestLibPostOHS/,,'` check_event=`cat... (7 Replies)
Discussion started by: ajincoep
7 Replies

7. Shell Programming and Scripting

syntax error in shell test: unknown operator

Hi All, can some one figure out the syntax issue here. How to overcome this? #!/bin/sh $ HFR_MAIL=NO $ PRP_MAIL=NO $ MC_MAIL=NO $ if && && ]; then > echo "NO " > else > echo "YES" > fi test: unknown operator NO $ if && && ]; then > echo "NO" > else > echo "YES" >... (4 Replies)
Discussion started by: shellscripter
4 Replies

8. Solaris

Unknown File Type error

Greetings there, i was trying to install an eclipse plugin on sunOS 4.x for the solaris sparc platform, and i got the following error: /usr/project/RAServer/bin> ./RAStart.sh Starting Agent Controller ld.so.1: RAServer: fatal: /usr/project/RAServer/lib/libxerces-c.so.24: unknown file type... (3 Replies)
Discussion started by: rohitsz
3 Replies

9. Shell Programming and Scripting

Reading from blocking fifo pipe in shell script

Hi!! I have a problem reading from a fifo pipe in shell script. The idea is simple, I have a C program with two pipe files: An input pipe I use to send commands in shell script to the C program (echo "command" > input.pipe) An output pipe that I read the result of the command also in... (4 Replies)
Discussion started by: victorin
4 Replies

10. Programming

Error: unknown pseudo-op: `.weakref'

It's really strange that I have these error messages as follows when I tried to compile the C++ program. g++ -c -pipe -DOpenModeType=std::_Ios_Openmode -g -I. -o Obj/NP_genome_info.o NP_genome_info.cpp {standard input}: Assembler messages: {standard input}:10: Error: unknown pseudo-op:... (6 Replies)
Discussion started by: napapanbkk
6 Replies
Login or Register to Ask a Question