Sponsored Content
Top Forums UNIX for Advanced & Expert Users Retrieving command line arguments of a particular PID Post 302252171 by Andrewkl on Tuesday 28th of October 2008 10:05:38 PM
Old 10-28-2008
hi,

Thank you for the tip.

I am able to read in the contents of the "cmdline" file into a variable,
but when I try to print out the string, the output shows only characters before
the first null character.

How do I get the other characters after the first null character.
You suggested that i use pointer arithmetic, but how do i'm not sure
how to get the index of the '\0'.

I used strtok(), but it stops processing after the first null.

my code is below.
-------------------------------------------------

% cd /proc/14007
% cat cmdline
emacs--background-colorblack/tmp/abc

---------------------------

% ps -e -o pid,args | grep 14007
14007 emacs --background-color black /tmp/abc

---------------------------------------

% a.out /proc/14007/cmdline
file length is: 0
content is [emacs] <<<<<----- everything after first null character is not shown
strlen: 5
1: emacs
Tokenizing complete


==============================================================
Code:
#include <stdio.h>


main (int argc, char *argv[])
{
  FILE *fp;
  char *tok;
  int x = 1;
                  
  long  lFileLen;               /* Length of file */
  char *contents;                  /* Dynamically allocated buffer (entire file) */

  if (argc < 2) {
     printf("need a filename\n");
     exit(1);
  }

  fp = fopen(argv[1], "r"); /* Open in BINARY mode */
  if (fp == NULL) {
      printf("could not open file\n");
      exit(2);
  }

  fseek(fp, 0L, SEEK_END);  /* Position to end of file */
  lFileLen = ftell(fp);     /* Get file length */
  rewind(fp);               /* Back to start of file */

  printf("file length is: %ld\n", lFileLen);
 
  lFileLen = 200; /* assume there are 200 bytes at most */
  
  contents = (char*)calloc(lFileLen + 1, sizeof(char));

  if(contents == NULL )
  {
    printf("\nInsufficient memory to read file.\n");
    return 0;
  }

  /* Read the entire file into contents */
  fread(contents, lFileLen, 1, fp); 
  
  fclose(fp);

  printf("content is [%s]\n", contents);  /* nothing after first null character !!! */
  printf("strlen: %d\n", strlen(contents)); 
  
   /* extract first string from string sequence */
  tok = (char*)strtok(contents, "\0");

  /* print first string after tokenized */
  printf("%i: %s\n", x, tok);

  /* loop until finishied */
  while (1) 
  { 
          /* extract string from string sequence */
          tok = (char*)strtok(NULL, "\0");

          /* check if there is nothing else to extract */
          if (tok == NULL)
          {
                  printf("Tokenizing complete\n");
               /*   exit(0); */
                  break;
          } 

          /* print string after tokenized */
          printf("/%i: %s\n", x, tok);
          x++;
  } 


  free(contents);

}


Last edited by Andrewkl; 10-29-2008 at 01:40 AM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Parsing the command line arguments

Is there a way to get the command line arguments. I am using getopt(3) but if the arguments are more than one for a particular option than it just ignores the second argument. For eg ./a.out -x abc def now abd will be got with -x using getopt "( x : )" and string abc\0def will get stored... (7 Replies)
Discussion started by: jayakhanna
7 Replies

2. Programming

command line arguments

Hi How to pass multi line text as a command line argument to a program. (i.e) ./a.out hi this is sample 0 file1 where hi this is sample should be stored in argv 0 in argv and so on... (3 Replies)
Discussion started by: bankpro
3 Replies

3. UNIX for Dummies Questions & Answers

arguments in command line

Hi all, How many arguments can we pass while testing a prgm at command line.. I encountered an issue while passing 10 arguments. For $10 its taking argument passed for $1 followed by 'zero'. can we pass more than 9 arguments /Is there any other way. Thanks, rrs (6 Replies)
Discussion started by: rrs
6 Replies

4. UNIX for Dummies Questions & Answers

Retrieving PID from a file

Hello I need to retrieve the content of a file in the shell script file(.sh file). I store the Process ID of the a process in file.Only the PID is available in that file. Inside the shell script i want to retireve the content(PID) and need to check for the existence of the Process.Basically... (5 Replies)
Discussion started by: appleforme1415
5 Replies

5. Shell Programming and Scripting

command line arguments

-------------------------------------------------------------------------------- I have this while loop and at the end I am trying to get it to tell me the last argument I entered. And with it like this all I get is the sentence with no value for $1. Now I tried moving done after the sentence... (1 Reply)
Discussion started by: skooly5
1 Replies

6. UNIX for Dummies Questions & Answers

Command line arguments.

I am working on a script wherein i need the user to enter the Build ID for eg:the command line will show enter the build ID Now on entering the build ID it should be assigned to @ARGV. How can this be done.? (1 Reply)
Discussion started by: Varghese
1 Replies

7. UNIX for Dummies Questions & Answers

command line arguments

hi, can someone how to accept command line arguments as a variable using in script? like: ./scriptname arguments by accept arguments, I can use it in my script? thx! (1 Reply)
Discussion started by: ikeQ
1 Replies

8. Shell Programming and Scripting

Command Line Arguments - not working

I am new to the world of Unix and shell scripting and have been trying to get the following simple script to work: #!/bin/bash echo "what is your age?" echo "you are $1 years old"I want to be able to enter my age on the command line, when prompted, and it return the... (1 Reply)
Discussion started by: meursault
1 Replies

9. Shell Programming and Scripting

command line arguments

hi,,,, I want to create a command prompt, for example "prompt>", so my prompt need to handle commands, for example "prompt>cmd", so i want to know how to get arguments for my own commands cmd, i.e. default argc should contain arguments count and argv should point to the argument vector i.e, for... (2 Replies)
Discussion started by: vins_89
2 Replies

10. UNIX for Beginners Questions & Answers

Loop with command line arguments

Ubuntum, Bash version: 4.3.46 Hi, how can I create a loop where the command line arguments change (increase) and every time the number of arguments is different ? ### I have many gene names... that mean gene1=$2, gene2=$3, ...... geneN=$N+1 ### some time the number of gene is 25, other... (7 Replies)
Discussion started by: echo manolis
7 Replies
cmdline(n)						Command line and option processing						cmdline(n)

__________________________________________________________________________________________________________________________________________________

NAME
cmdline - Procedures to process command lines and options. SYNOPSIS
package require Tcl 8.2 package require cmdline ?1.3.1? ::cmdline::getopt argvVar optstring optVar valVar ::cmdline::getKnownOpt argvVar optstring optVar valVar ::cmdline::getoptions arglistVar optlist ?usage? ::cmdline::getKnownOptions arglistVar optlist ?usage? ::cmdline::usage optlist ?usage? ::cmdline::getfiles patterns quiet ::cmdline::getArgv0 _________________________________________________________________ DESCRIPTION
This package provides commands to parse command lines and options. ::cmdline::getopt argvVar optstring optVar valVar This command works in a fashion like the standard C based getopt function. Given an option string and a pointer to an array or args this command will process the first argument and return info on how to proceed. The command returns 1 if an option was found, 0 if no more options were found, and -1 if an error occurred. argvVar contains the name of the list of arguments to process. If options are found the list is modified and the processed arguments are removed from the start of the list. optstring contains a list of command options that the application will accept. If the option ends in ".arg" the command will use the next argument as an argument to the option. Otherwise the option is a boolean that is set to 1 if present. optVar refers to the variable the command will store the found option into (without the leading '-' and without the .arg extension). valVar refers to the variable to store either the value for the specified option into upon success or an error message in the case of failure. The stored value comes from the command line for .arg options, otherwise the value is 1. ::cmdline::getKnownOpt argvVar optstring optVar valVar Like ::cmdline::getopt, but ignores any unknown options in the input. ::cmdline::getoptions arglistVar optlist ?usage? Processes the set of command line options found in the list variable named by arglistVar and fills in defaults for those not speci- fied. This also generates an error message that lists the allowed flags if an incorrect flag is specified. The optional usage-argu- ment contains a string to include in front of the generated message. If not present it defaults to "options:". optlist contains a list of lists where each element specifies an option in the form: flag default comment. If flag ends in ".arg" then the value is taken from the command line. Otherwise it is a boolean and appears in the result if present on the command line. If flag ends in ".secret", it will not be displayed in the usage. ::cmdline::getKnownOptions arglistVar optlist ?usage? Like ::cmdline::getoptions, but ignores any unknown options in the input. ::cmdline::usage optlist ?usage? Generates and returns an error message that lists the allowed flags. optlist is defined as for ::cmdline::getoptions. The optional usage-argument contains a string to include in front of the generated message. If not present it defaults to "options:". ::cmdline::getfiles patterns quiet Given a list of file patterns this command computes the set of valid files. On windows, file globbing is performed on each argu- ment. On Unix, only file existence is tested. If a file argument produces no valid files, a warning is optionally generated (set quiet to true). This code also uses the full path for each file. If not given it prepends the current working directory to the filename. This ensures that these files will never conflict with files in a wrapped zip file. The last sentence refers to the pro-tools. ::cmdline::getArgv0 This command returns the "sanitized" version of argv0. It will strip off the leading path and removes the extension ".bin". The latter is used by the pro-apps because they must be wrapped by a shell script. EXAMPLES
set options { {a "set the atime only"} {m "set the mtime only"} {c "do not create non-existent files"} {r.arg "" "use time from ref_file"} {t.arg -1 "use specified time"} } set usage ": MyCommandName [options] filename ... options:" array set params [::cmdline::getoptions argv $options $usage] if { $params(a) } { set set_atime "true" } set has_t [expr {$params(t) != -1}] set has_r [expr {[string length $params(r)] > 0}] if {$has_t && $has_r} { return -code error "Cannot specify both -r and -t" } elseif {$has_t} { ... } This example, taken (and slightly modified) from the package fileutil, shows how to use cmdline. First, a list of options is created, then the 'args' list is passed to cmdline for processing. Subsequently, different options are checked to see if they have been passed to the script, and what their value is. BUGS, IDEAS, FEEDBACK This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category cmdline of the Tcllib SF Trackers [http://sourceforge.net/tracker/?group_id=12883]. Please also report any ideas for enhancements you may have for either package and/or documentation. KEYWORDS
argument processing, argv, argv0, cmdline processing, command line processing cmdline 1.3.1 cmdline(n)
All times are GMT -4. The time now is 05:50 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy