故障源码

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    if (argc != 4)
    {
        printf("usage: fastChangeCore pid startCoreId endCoreId\n");
        return 1;
    }
    cpu_set_t mask;

    int pid = atoi(argv[1]);
    int startCoreId = atoi(argv[2]);
    int endCoreId = atoi(argv[3]);
    int coreId = startCoreId;
    while (1)
    {
        CPU_ZERO(&mask);
        CPU_SET(coreId, &mask);
        // 进程迁移到CPU i
        if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
        {
            printf("绑定CPU出错, ERROR:%s\n", strerror(errno));
            return -1;
        }
        coreId++;
        if (coreId > endCoreId)
        {
            coreId = startCoreId;
        }
    }
    return 0;
}

编译指令及故障输出

 

yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ gcc fastChangeCore.c 
fastChangeCore.c: In function ‘main’:
fastChangeCore.c:26:9: warning: implicit declaration of function ‘CPU_ZERO’; did you mean ‘FD_ZERO’? [-Wimplicit-function-declaration]
         CPU_ZERO(&mask);
         ^~~~~~~~
         FD_ZERO
fastChangeCore.c:27:9: warning: implicit declaration of function ‘CPU_SET’; did you mean ‘FD_SET’? [-Wimplicit-function-declaration]
         CPU_SET(coreId, &mask);
         ^~~~~~~
         FD_SET
fastChangeCore.c:29:13: warning: implicit declaration of function ‘sched_setaffinity’; did you mean ‘sched_setparam’? [-Wimplicit-function-declaration]
         if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
             ^~~~~~~~~~~~~~~~~
             sched_setparam
/usr/bin/ld: /tmp/cckoBBT3.o: in function `main':
fastChangeCore.c:(.text+0x96): undefined reference to `CPU_ZERO'
/usr/bin/ld: fastChangeCore.c:(.text+0xaf): undefined reference to `CPU_SET'
collect2: error: ld returned 1 exit status

解决方案:文件头部添加宏定义 #define _GNU_SOURCE

完整源码如下

#define _GNU_SOURCE

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    if (argc != 4)
    {
        printf("usage: fastChangeCore pid startCoreId endCoreId\n");
        return 1;
    }
    cpu_set_t mask;

    int pid = atoi(argv[1]);
    int startCoreId = atoi(argv[2]);
    int endCoreId = atoi(argv[3]);
    int coreId = startCoreId;
    while (1)
    {
        CPU_ZERO(&mask);
        CPU_SET(coreId, &mask);
        // 进程迁移到CPU i
        if (sched_setaffinity(pid, sizeof(mask), &mask) == -1)
        {
            printf("绑定CPU出错, ERROR:%s\n", strerror(errno));
            return -1;
        }
        coreId++;
        if (coreId > endCoreId)
        {
            coreId = startCoreId;
        }
    }
    return 0;
}

编译效果

yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ gcc fastChangeCore.c
yeqiang@yeqiang-PC:~/code/cproj/openssl-training$ ll a.out
-rwxr-xr-x 1 yeqiang yeqiang 16704 2022-12-12 10:40:39 a.out

更多推荐