0% found this document useful (0 votes)
55 views6 pages

Practical On GCC Codes

The document provides steps to run a C/C++ program from the terminal using gcc compiler. It details installing gcc, creating and saving code files, compiling the code using gcc commands, and running the resulting executable file. Key steps include installing build-essential for development libraries, using gcc -version to check the compiler, editing and saving code files with an editor, compiling with gcc commands like gcc filename.c or g++ filename.cpp, and running the output executable.

Uploaded by

Brian Copper
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views6 pages

Practical On GCC Codes

The document provides steps to run a C/C++ program from the terminal using gcc compiler. It details installing gcc, creating and saving code files, compiling the code using gcc commands, and running the resulting executable file. Key steps include installing build-essential for development libraries, using gcc -version to check the compiler, editing and saving code files with an editor, compiling with gcc commands like gcc filename.c or g++ filename.cpp, and running the output executable.

Uploaded by

Brian Copper
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Run a C/C++ program on terminal using gcc compiler

Step 1. Open terminal by pressing ALT+CTRL+T


Step 2. Type command to install gcc or g++ complier:
$ sudo apt-get install build-essential
This will install the necessary C/C++ development libraries for your Ubuntu to create C/C++
programs.
To check gcc version type this command:
$ gcc –version or gcc –v
Step 3. Now go to that folder where you will create C/C++ programs. I am creating my programs in
home directory.
Step 4. Open a file using any editor.
$ sudo gedit myprog.c (for C programs)
$ sudo gedit hello.cpp (for C++ prgrams)
Step 5. Add this code in the file:
(i). C program code:
/*
** server.c -- a stream socket server demo
*/

#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 <netdb.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <signal.h>

#define PORT "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);
}

// get sockaddr, IPv4 or IPv6:


void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
return &(((struct sockaddr_in*)sa)->sin_addr);
}

return &(((struct sockaddr_in6*)sa)->sin6_addr);


}

int main(void)
{
int sockfd, new_fd; // listen on sock_fd, new connection on new_fd
struct addrinfo hints, *servinfo, *p;
struct sockaddr_storage their_addr; // connector's address information
socklen_t sin_size;
struct sigaction sa;
int yes=1;
char s[INET6_ADDRSTRLEN];
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // use my IP

if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {


fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}

// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) {
perror("server: socket");
continue;
}

if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,


sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}

if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {


close(sockfd);
perror("server: bind");
continue;
}

break;
}
if (p == NULL) {
fprintf(stderr, "server: failed to bind\n");
return 2;
}

freeaddrinfo(servinfo); // all done with this structure

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);
}

printf("server: waiting for connections...\n");

while(1) { // main accept() loop


sin_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
continue;
}

inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s);
printf("server: got connection from %s\n", s);

if (!fork()) { // this is the child process


close(sockfd); // child doesn't need the listener
if (send(new_fd, "Hello, world!", 13, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd); // parent doesn't need this
}

return 0;
}
Step 6. Save the file and exit.
Step 7. Compile the program using any of the following command:

(i). Compiling C program.

$ sudo gcc myprog.c


It will create an executable file with “.out” extension named as “a.out”.
Or

$ sudo gcc –o myprog myprog.c


Where myprog is the executable or object file of myprog.c program.
(ii). Compiling C++ program.
$ sudo g++ hello.cpp (or)
$ sudo g++ -o hello hello.cpp
[Note: Make sure you are in the same directory where you have created your program before
compiling it.]
Step 8. To run this program type this command:
(i). For running C program
$ ./a.out (If you compiled using first command)
Or
$ ./myprog (If you compiled using second command)
(ii). For running C++ program
$ ./a.out (If you compiled using first command)
Or
$ ./hello (If you compiled using second command)
It will show output on the terminal.

You might also like