Есть программа:
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/syscall.h>
#include <pthread.h>
#include <cstdio>
using namespace std;
void* procInfo(void*);
mode_t readUmasl();
int cntOpenFiles();
void printArgv();
void printCodDataStackEnvSegment();
char** argvG;
int argcG;
extern char** environ;
int main(int argc, char** argv)
{
argvG = (char**)malloc(argc*sizeof(char*));
memcpy(argvG, argv, argc*sizeof(char*));
argcG = argc;
procInfo(NULL);
if(!fork())
{
//printf("-------------------CHILD_PROC-------------------\n");
cout << "-------------CHILD PROCESS-------------" << "\n";
procInfo(NULL);
}
wait();
pthread_t thread_id;
//printf("------------------IN_THREAD-----------------\n");
cout << "-------------IN THREAD-------------"<< "\n";
pthread_create(&thread_id, NULL, procInfo, NULL);
pthread_join(thread_id, NULL);
pause();
return 0;
pause();
}
void* procInfo(void* data )
{
cout << "PID: " << getpid() << "\n";
cout << "PPID: " << getppid() << "\n";
cout << "UID: " << getuid() << "\n";
cout << "GID: " << getgid() << "\n";
cout << "SID: " << getsid(getpid()) << "\n";
cout << "PGID: " << getpgid(getpid()) << "\n";
cout << "UMASK: "<< readUmasl() << "\n";
cout <<"Control terminal:";
if(isatty(0))
cout << ttyname(0);
else
cout <<"closed";
cout <<"\n";
char buff[256];
getcwd(buff, 256);
cout << "Current directory: " <<buff<< "\n";
cout << "count open files: " << cntOpenFiles() << "\n";
cout << "Priority: " << getpriority(PRIO_PROCESS, getpid());
printf("\n-------------------Priority-------------------\n");
setpriority(PRIO_PROCESS, getpid(),5);
cout << "Priority: " << getpriority(PRIO_PROCESS, getpid());
printArgv();
printCodDataStackEnvSegment();
return NULL;
}
mode_t readUmasl()
{
mode_t mask = umask(0);
umask(mask);
return mask;
}
int cntOpenFiles()
{
char buff[256];
sprintf(buff,"/proc/%i/fd",getpid());
DIR *dir = opendir(buff);
int i=0;
dirent* entry;
while((entry = readdir(dir))!=NULL)
{
++i;
}
closedir(dir);
i -= 3;
return i;
}
void printArgv()
{
for(int i=0; i <argcG; i++)
{
cout << argvG[i];
}
cout << "\n";
}
void printCodDataStackEnvSegment()
{
// Cod segment 1
char buffer[256];
sprintf(buffer, "/proc/%i/maps", getpid());
FILE *map = fopen(buffer, "r");
fgets(buffer,256,map);
char *pCodSegStart = strtok(buffer, "-");
char *pCodSegEnd = strtok(NULL, " ");
cout << "Code segment: " << pCodSegStart <<" " << pCodSegEnd << "\n";
// Data segment 3
char buffer1[256];
fgets(buffer1,256,map);
fgets(buffer1,256,map);
char *pDataStart = strtok(buffer1, "-");
char *pDataEnd = strtok(NULL, " ");
cout << "Data segment: " << pDataStart <<" " << pDataEnd<< "\n";
fclose(map);
// Stack segment 3 с конца
if (syscall(SYS_gettid) == getpid())
{
cout << "in main thread \n";
char buff[256];
sprintf(buff, "/proc/%i/maps", getpid());
map = fopen(buff, "r");
int i = 0;
while(fgets(buff,256,map) != NULL){
++i;
}
rewind(map);
int j = 0;
for (; j != i - 2; ++j ){
fgets(buff, 256, map);
}
fclose(map);
char *pStackStart = strtok(buff, "-");
char *pStackFinish = strtok(NULL, " ");
cout << "Stack segment: " << pStackStart <<" " << pStackFinish<< "\n";
}
else
{
void *addr;
size_t size;
pthread_t self;
pthread_attr_t attr;
self = pthread_self();
pthread_getattr_np(self, &attr);
pthread_attr_getstackaddr(&attr, &addr);
pthread_attr_getstacksize(&attr, &size);
cout << "in non main thread now \n";
printf("stack addr = %0lx\n", addr);
printf("stack addr = %0lx\n", addr-size);
}
// Env segment
cout << "Enviroment segment: "<< environ[0] << " ";
int i = 0;
while(environ[i + 1] != NULL) {
++i;
}
cout << environ[i] + strlen(environ[i]) + 1 << "\n";
}
Делаю gcc program.c - получаю ошибку «program.c:1:20: fatal error: iostream: No such file or directory #include <iostream> ^ compilation terminated.»
В чем причина?