LQ Newbie
Registered: Jul 2008
Posts: 8
Rep:
|
.exe file terminated issue .
Dear Linux Guru,
I am new in linux. I need help from you in easy way.
I have installed fedora 4 and run one file for fax modem status. it is also responsible to communicate with our application and get status from modem. So, its working fine on Fedora 4.
but when i want to run on Fedora 7,8,9.. it's automatically terminated after some time. you can find code below. so, please can you help me out.
--------------------Code----------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>
//#define MYPORT 3490 // the port users will be connecting to
#define BACKLOG 10 // how many pending connections queue will hold
void sigchld_handler(int s)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}
int main(int argc, char *argv[])
{
int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
FILE *fp=NULL;
int filefd;
struct sockaddr_in my_addr; // my address information
struct sockaddr_in their_addr; // connector’s address information
socklen_t sin_size;
struct sigaction sa;
int yes=1;
int port;
int n;
char command[100];
char BUFFER[4096];
int filesize;
if(argc < 2)
{
perror("Parameters too shorts...");
exit(1);
}
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1)
{
perror("setsockopt");
exit(1);
}
port = atoi(argv[1]);
my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(port); // short, network byte order
my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
//memset(&(my_addr.sin_zero), ’\0’, 8);
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
{
perror("bind");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1) {
perror("listen");
exit(1);
}
sa.sa_handler = sigchld_handler; // reap all dead processes
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if (sigaction(SIGCHLD, &sa, NULL) == -1)
{
perror("sigaction");
exit(1);
}
int i;
while(1)
{
// main accept() loop
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1)
{
perror("accept");
continue;
}
printf("server : got connection from %s\n",inet_ntoa(their_addr.sin_addr));
printf("\n One");
if (!fork())
{ // this is the child process
close(sockfd); // child doesn’t need the listener
while(1){
for(i=0;i<100;i++)
command[i]=NULL;
if((n=recv(new_fd, command, 100, 0)) == -1)
{
perror("READ ERROR Change ");
printf("\n Two");
exit(1);
}
//printf("%d,......%s\n",n,command);
if(strcmp(command,"state")==0)
{
system("faxstat -s > stat.txt");
filefd = open("stat.txt",0);
if(filefd <0)
{
perror("FILE OPEN ERROR");
printf("\n three");
exit(1);
}
if((n=read(filefd, BUFFER, 2048)) == -1)
{
perror("FILE READ ERROR");
printf("\n four");
exit(1);
}
if (write(new_fd, BUFFER, strlen(BUFFER)) == -1)
perror("FILE send ERROR");
close(filefd);
printf("\n five");
exit(1);
}//end if
else
if(strcmp(command,"state-d")==0)
{
system("faxstat -d > stat_d.txt");
filefd = open("stat_d.txt",0);
if(filefd <0)
{
perror("FILE OPEN ERROR");
printf("\n six");
exit(1);
}
if((n=read(filefd, BUFFER, 2048)) == -1)
{
perror("FILE READ ERROR");
printf("\n seven");
exit(1);
}
if (write(new_fd, BUFFER, strlen(BUFFER)) == -1)
perror("FILE send ERROR");
close(filefd);
printf("\n eight");
exit(1);
}//end if
else
if(strcmp(command,"pgrep commandserver")==0)
{
system("pgrep commandserver > stat_d.txt");
filefd = open("stat_d.txt",0);
if(filefd <0)
{
perror("FILE OPEN ERROR");
printf("\n nine");
exit(1);
}
if((n=read(filefd, BUFFER, 2048)) == -1)
{
perror("FILE READ ERROR");
printf("\n ten");
exit(1);
}
if (write(new_fd, BUFFER, strlen(BUFFER)) == -1)
perror("FILE send ERROR");
close(filefd);
printf("\n eleven");
exit(1);
}//end if
else
if(strcmp(command,"ps -a")==0)
{
system("ps -a > stat_d.txt");
filefd = open("stat_d.txt",0);
if(filefd <0)
{
perror("FILE OPEN ERROR");
printf("\n twelve");
exit(1);
}
if((n=read(filefd, BUFFER, 2048)) == -1)
{
perror("FILE READ ERROR");
printf("\n thirteen");
exit(1);
}
if (write(new_fd, BUFFER, strlen(BUFFER)) == -1)
perror("FILE send ERROR");
close(filefd);
printf("\n fourteen");
exit(1);
}//end if
else
system(command);
}//inner while loop
close(new_fd);
printf("\n fifteen");
exit(0);
}//end if fork
close(new_fd); // parent doesn’t need this
}//end while
return 0;
}
|