Getting Environment Variables of Another User in C++ in Unix?

Dear experts,

I have a process running in UNIX. I want the process to get the environment variables of a user other than the user in which it is running. Then I will run some of its threads with the environment of that another user. How can I achieve this?

Who is Participating?
jkrConnect With a Mentor Commented:
The easiest way would be to launch a shell to execute an 'export' command that list all environment variables. From your other Q I understand that your process is running as 'root', so you could use
#include <iostream>
#include <vector>
using namespace std;

#include <stdlib.h>

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int run_cmd ( const char* pCmd, vector<string>& vOutput) {

  FILE *fp;
  int status;
  char path[PATH_MAX];

  fp = popen(pCmd, "r");
 // if (fp == NULL)
    /* Handle error */;

  while (fgets(path, PATH_MAX, fp) != NULL)
      printf("%s", path);

  status = pclose(fp);
  if (status == -1) {
    /* Error reported by pclose() */

  } else {

    /* Use macros described under wait() to inspect `status' in order
       to determine success/failure of command executed by popen() */
return 0;

int main () {

  vector<string> vOutput;

  run_cmd("su -l OtherUser csh -c export",vOutput);

  // now vOutput contains all environment variables

  return 0;

Open in new window

arnoldConnect With a Mentor Commented:
If you want to run an under the effective rights of another user, you have to switch to the effective user's settings. The environment variables are definable and vary depending on what the user has configured under their shell.

Are you spawning the thread using fork?

Have a look at any daemon application, http, etc. and you see that while the process starts running as root it then continues to run under a user with lower level rights.

I.e. you can use execv with fork etc.

get yourself an account on and you may be able to use one of the C++ programming references.

There are other similar resources where you can access various books to get an example.
GurcanKAuthor Commented:
The comments were satisfactory.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.