C语言的多进程(3)

本文介绍了C语言中关于进程的知识,包括进程的创建、终止、注册进程终止函数、环境变量、虚拟内存与物理内存的概念,以及孤儿进程和僵尸进程等。通过函数`fork()`、`exec()`等探讨了多进程的实现,特别是如何实现鼠标和键盘的同时输入。
摘要由CSDN通过智能技术生成

欢迎加入QQ:498903810 一起交流、讨论知识,里面有大佬,也有小白,天下码农一家亲,大家一起讨论进步。

优化ls -l的获取权限方式点击查看

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <pwd.h>
#include <time.h>
#include <grp.h>

int main()
{

    int j = 0;

    struct stat st;
    if(stat("stat.c", &st) < 0)
    {
        perror("stat");
        return -1;
    }
    for(j = 8; j >= 0; j--)
    {
        if(st.st_mode & (1 << j))
        {
            if(j % 3 == 2)
                printf("r");
            else if(j % 3 == 1)
                printf("w");
            else if(j % 3 == 0)
                printf("x");
        }
        else
            printf("-");
    }

    return 0;
}

进程来啦!!!点击获取源代码

main()函数,进程的准备

1.main 函数

一个程序运行起来就是一个进程,我们真实的代码是先进行链接,就是把C文件各个段进行组合,这个过程需要连接器,为我们作引导此时也就链接到我们的*.o文件里(其中最重要的是main()函数里面的参数,就是此时进入目标文件)。接着就需要加载器,将我们的代码加载进固定的虚拟地址。这个就是一个进程的完整步骤

2.程序的终止

(1)程序正常终止:

​ 方式:exit()_exit()return

exit():C语言库,会在程序结束之前进行缓冲区的清除;

_exit():系统API,不会在程序结束之前进行缓冲区的清除,直接推出进程。

#include <unistd.h>

int dup(int oldfd);//返回一个新的文件描述符,成功返回描述符,失败返回-1
int dup2(int oldfd, int newfd);//指定新的文件描述符,成功返回的描述,失败返回-1

dup2指定新的描述符,如果指定的描述符已经被占用,就把之前已经占用的描述符关闭,分配自己指定的描述符。

我们的printf()也是写文件,不过是写到流文件描述符是(1,1是标准输出)的那个文件。

alarm()函数
//头文件
#include <unistd.h>

//函数
unsigned int alarm(unsigned int seconds);

//描述
 alarm()  arranges  for  a SIGALRM signal to be delivered to the calling process in seconds seconds.

If seconds is zero, any pending alarm is canceled.

In any event any previously set alarm() is canceled.
signal()函数
头文件
#include <signal.h>

//函数指针
typedef void (*sighandler_t)(int);

//函数原型
sighandler_t signal(int signum, sighandler_t handler);


例:
#include <unistd.h>
#include <stdio.h>
#include <signal.h>

//真实的信号处理函数
//typedef void (*sighandler_t)(int); 函数指针
void func(int sig)//回调函数
{
    //printf("sig = %d\n", sig);
    if(sig == 14)
        printf("hello world\n");

}

int main()
{
    //操作系统2S之后会发一个信号SIGALRM给你的当前进程
    alarm(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值