标签:style blog color 使用 os io strong 文件
进程运行过程中必须有类似于用户的身份,哪个用户就是该用户的身份,就是那个用户的组 可用getuid(),getgid();获得 进程还有有效用户ID和有效组ID,缺少的情况下,与真实ID相同,可以用geteuid(),getegid(); 文件权限有S的时候,有效ID是进程的所有者(创建者),否则有效ID就是程序的运行者,与真实ID相同
ps -aux查看所有用户进程的权限,cpu,和内存的使用情况
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int main(int argc,char *argv[]){
char cmd[1024]="";
for(int i=1;i<argc;i++){
strcat(cmd,argv[i]);
strcat(cmd," ");
}
puts(cmd);
int ans;
ans=system(cmd);
printf("%x\n",ans);
}用system调用其他可执行程序,并输入参数 输入例如: ./main ./my_add 其中my_add计算两个数之和int main(int argc,char *argv[]){
if(argc!=2){
printf("failed\n");
return 0;
}
int left,right;
char cmd[1024]="";
char line[1024]="";
strcat(cmd,argv[1]);
strcat(cmd," ");
while(printf(">>"),scanf("%d %d",&left,&right)){
memset(line,0,sizeof(line));
sprintf(line,"%s %d %d",argv[1],left,right);
strcpy(cmd,line);
int ret;
ret=system(cmd);
printf("result:%d\n",ret/256);
}
}
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main(int argc,char *argv[]){
pid_t pid;
int i=3;
printf("hello\n");
pid=fork();
fflush(stdout);//儿子复制的时候将缓冲区也复制了,如果没有这句话,上面的hello将出现两便
if(pid>0){
printf("parents:pid:%u,ret:%u,pp:%u\n",getpid(),pid,getppid());
}
else if(pid==0){
// sleep(5);
printf("child:pid:%u,ret:%u,pp:%u\n",getpid(),pid,getppid());
}
printf("bye!\n");
}if(execl("/home/yang/0820/my_exec/","my_add","3","2",NULL)==-1){
perror("execl error");
}int execlp(const char *file, const char *arg, ...);例如:if(execlp("./my_add","my_add","fwef","fwe","fewgeraf",NULL)==-1){
perror("execlp error");
}int execv(const char *path, char *const argv[]);例如:char *args[10];
args[0]="my_add";
args[1]="12";
args[2]="23";
args[3]=NULL;
if(execv("/home/yang/0820/my_exec/my_add",args)==-1){
perror("execl:");
}FILE*popen(const char *command, const char *type);
int pclose(FILE *stream);
command为可执行文件的全路径和执行参数,type可选参数为“r” 或“w”FILE *fp;
char a[1000];
char b[1000];
char cmd[1024]="";
printf("plseas write\n");
fgets(a,1000,stdin);
sprintf(cmd,"%s %s",argv[1],a);
fp=popen(cmd,"r");//这个指令cmd为可执行文件的全路经
fgets(b,1000,fp);
printf("%s\n",b);FILE *fp; char a[1000]; gets(a); fp=popen(argv[1],"w"); fputs(a,fp); pclose(fp);
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{
pid_t pid = fork();
if( pid == 0 )
{
exit(10);
}
else
{
sleep(10);
}
}避免僵尸进程例子:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{
pid_t pid = fork();
if( pid == 0 )
{
exit(10);
}
else
{
wait(NULL); //NULL表示等待所有进程
sleep(10); //通常要将sleep放在wait的后面,要不然也会出现僵尸进程
}
}exit和_exit函数的原型:
#include<stdlib.h> //exit的头文件
#include<unistd.h> //_exit的头文件
void exit(int status);
void_exit(int status);
status是一个整型的参数,可以利用这个参数传递进程结束是的状态,0表示正常退出,其他数表示出现错误,进程非正常结束标签:style blog color 使用 os io strong 文件
原文地址:http://blog.csdn.net/youngyangyang04/article/details/38711713