#include <iostream>
#include <fstream>
#include <sstream>
#include <sys/types.h>
#include <unistd.h>
#include <cstring> // for strlen
using namespace std;
const int size = 8192; // bigger buffer for many environment variables
int main() {
// Build the /proc/<pid>/environ path
ostringstream oss;
oss << "/proc/" << getpid() << "/environ";
cout << "Reading from file: " << oss.str() << endl;
static char buffer[size] = {0};
// Open environ in binary mode
ifstream i_file(oss.str().c_str(), ios::in | ios::binary);
if (!i_file) {
cerr << "Error: could not open " << oss.str() << endl;
return 1;
}
// Read environment variables
i_file.read(buffer, size);
// Walk through environment variables (null-separated)
char *p = buffer;
do {
cout << "[" << p << "]" << endl;
p += strlen(p) + 1;
} while (*p);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8Y3N0cmluZz4gICAvLyBmb3Igc3RybGVuCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgc2l6ZSA9IDgxOTI7ICAvLyBiaWdnZXIgYnVmZmVyIGZvciBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlcwoKaW50IG1haW4oKSB7CiAgICAvLyBCdWlsZCB0aGUgL3Byb2MvPHBpZD4vZW52aXJvbiBwYXRoCiAgICBvc3RyaW5nc3RyZWFtIG9zczsKICAgIG9zcyA8PCAiL3Byb2MvIiA8PCBnZXRwaWQoKSA8PCAiL2Vudmlyb24iOwogICAgY291dCA8PCAiUmVhZGluZyBmcm9tIGZpbGU6ICIgPDwgb3NzLnN0cigpIDw8IGVuZGw7CgogICAgc3RhdGljIGNoYXIgYnVmZmVyW3NpemVdID0gezB9OwoKICAgIC8vIE9wZW4gZW52aXJvbiBpbiBiaW5hcnkgbW9kZQogICAgaWZzdHJlYW0gaV9maWxlKG9zcy5zdHIoKS5jX3N0cigpLCBpb3M6OmluIHwgaW9zOjpiaW5hcnkpOwogICAgaWYgKCFpX2ZpbGUpIHsKICAgICAgICBjZXJyIDw8ICJFcnJvcjogY291bGQgbm90IG9wZW4gIiA8PCBvc3Muc3RyKCkgPDwgZW5kbDsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBSZWFkIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgaV9maWxlLnJlYWQoYnVmZmVyLCBzaXplKTsKCiAgICAvLyBXYWxrIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzIChudWxsLXNlcGFyYXRlZCkKICAgIGNoYXIgKnAgPSBidWZmZXI7CiAgICBkbyB7CiAgICAgICAgY291dCA8PCAiWyIgPDwgcCA8PCAiXSIgPDwgZW5kbDsKICAgICAgICBwICs9IHN0cmxlbihwKSArIDE7CiAgICB9IHdoaWxlICgqcCk7CgogICAgcmV0dXJuIDA7Cn0=