'Command line arguments
How would i go about coding (in C) a program that accepts one command line argument, (that includes the program name and the port number that will be used for the program). And it would return -1 if the argument is not specified or less than 1024?
And then it would initiate the required socket operations to create and bind a socket.
cheers
Solution 1:[1]
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[]){
// printf("asdasdasdasd");
// yo can capture program name as below
// printf("Program Name Is : %s",argv[0]);
if(argc==1){
return(514);
};
if(argc>=2){
int port = atoi(argv[1]);
if(port<1024){
return(514);
}
else{
return(513);
}
}
// printf("asdsads");
return 0;
}
The return value from main is generally used to indicate the execution status.The max value returned from main is limited to 512. If you try to return a greater value than 512, for example 513, you will get 1 as return. If you returned 514, you will get 2 as return value. You can see the return value by running echo $? after execution. See below:
gcc -o main main.c
echo $?
Assuming your program name is main.c. Instead of returning -1 yo can check the status by returning an integer easily.
Solution 2:[2]
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char **argv) {
// FIXME check for argc < 2
uint16_t port = (uint16_t)atoi(argv[1]);
if (port < 1024) {
fprintf(stderr, "Port %s is less than 1024, cannot proceed.", argv[1]);
return 3;
}
}
Ok let's start unpacking.
First off, convert the first argument to an integer. Then convert it to unsigned int16. (This happens to work correctly on the one 16 bit platform I looked at, but I don't know if its guaranteed or not. It definitely works on all 32 or 64 bit platforms.)
Ports are always unsigned 16 bit integers; thus the range from 0 to 65535; but 0 isn't usable in BSD sockets so the range is really 1 to 65535.
From there, we simply check if it's less than 1024; if so error message. Since the range of uint16_t is correct; we don't need any more checks. The error message contains the original string, which may or may not be the best way to report the problem to the user.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | eheperson |
| Solution 2 |
