linux笔记---程序函数

来源:互联网 发布:百度云域名查询 编辑:程序博客网 时间:2024/04/30 10:43
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>


void fun()
{
printf("This is fun\n");
}
int main()
 {
        atexit(fun);
        printf("hello\n");
        sleep(5);
        exit(0);
        //exit(0);
        //_exit;
pid_t id =fork();
if( id ==0)
{//child
          printf("child: %d,%d\n",getpid(),getppid());
          while(1);
        }
        else
       {//father
          printf("father: %d,%d\n",getpid(),getppid());
        sleep(5);
        exit(0);
        }
}


2.exit函数
  #include<stdio.h>
  void exit(int status);    
  void_Exit(int status);
 保留再退


  #include<unistd.h>
  void_exit(int status);
强退


  #inclde <stdlib.h>
  int atexit(void(*fun)(void));
在进程结束后系统才调用atexit(void(*fun)(void))注册的函数指针指向的回掉函数;即在(*fun)结束后


3.存储器分配
   #include<stdlib.h>
   void *malloc(size_t ,size);
   void *calloc(size_t nobi,size_t size);
   void *realloc(void*ptr,size_t,newzise);
   void free(void *ptr);


   》malloc函数,分配指定字节存储区,初始值不确定
   》calloc函数,指定数量,长度的对象分配存储空间,空间内每一位都为0。
   》yealloc函数,更改存储区长度,新增区域初始值不确定。ptr为空,malloc与yealloc相同
  *分配空间要大于实际存储空间,即分配空间=存储空间+管理信息空间+未利用空间。不可在分配区起始位置前写入,会重写上条分配区的管理信息,很难被发现。


4.环境变量:name=value
   #include<stdlib.h>
   char
5.setjmp和longjmp
  #nclude <setjmp.h>
int setjmp(jmp_buf env);
void longjmp(jmp_buf env,int val);
      
6.getrlimit和setlimit函数
  #include<sys/resource.h>
  int getrlimit(int resource,struct rlimit *rlbtr);
  int setrlimit(int resource,const struct rlimit *rlbtr);


7.uid,euid,uid作用显示
   #include <stdio.h>
   #include <unistd.h>
   #include <sys/types.h>
   #include <string.h>
  int main()
   {
       
     printf("pid: %d ,ppid: %d,uid: %d,euid: %d,gid: %d,egid: %d\n",getpid(),getppid(),getuid(),geteuid(),getgid(),getegid);
      return 0;
    
     FILE *fp = fopen("./log","w");
     if(!fp)
     {
     perror("fopen");
     return -1;
      }
  int count = 10;
  const char *msg = "hello bit\n";
  while(count)
  {
  fwrite(msg,1,strlen(msg),fp);
  count--;
   }
  fclose(fp);
  return 0;
   }


8.xfork函数
  vfork用于创建一个新进程进而创建一个新程序。
  Vfork与fork都会创建一个子进程,但他不会将父进程地址空间复制到子进程中,因为子进程会立即调用exec,于是不会访问地址空间。
  若子进程调用exec或exit之前,它在父进程的空间中运行,也就是说会更改父进程的数据段,栈和堆。

  Vfork与fork区别在于:vfork保证子进程先运行,在他调用exec或(exit)之后父进程才可被调度运行


(复习框架,不时更新)

0 0