C - 两个进程读取同一个文件

C - Two processes reading the same file

我有一个读取文件和 returns 整数的函数。有两个进程使用相同的函数,我遇到了分段错误。

读取函数:

int getNumberFromFile() {

    FILE* fp;
    char* line;

    fp = fopen(fileName, "rb");
    fgets (line, 10, fp);
    fclose(fp);

    return atoi(line);

}

函数用法:

pid_t pid = fork();

if (pid == 0) {
    struct process p1;
    p1.processId = getpid();

    printf("N: %d, PID: %d", getNumberFromFile(), p1.processId);
}
else if (pid > 0 ) {
    struct process p2;
    p2.processId = getpid();

    printf("N: %d, PID: %d", getNumberFromFile(), p2.processId);
}
else {
    printf("Error: Could not create process\n");
}

难道两个不同的进程不能同时读取同一个文件吗?如果不是,我将如何赋予一个进程优先权,以便其他函数可以在之后执行读取函数?

您需要在 "line" 指针后面分配一些存储空间。只需将声明更改为 char line[10].

Ps。从多个进程读取文件没有问题。

您的问题与线程无关。

 char* line;
 fgets (line, 10, fp);

您正在写入未初始化的内存。

无论你有一个还是两个进程使用该函数,都会出现你的问题;功能有问题。您还没有分配任何 space 来将该行读入:

int getNumberFromFile()
{
    FILE* fp;
    char* line;                  // Uninitialized pointer

    fp = fopen(fileName, "rb");  // Unchecked - errors possible
    fgets(line, 10, fp);         // Unchecked - and bad news if fopen() failed
    fclose(fp);                  // Bad news if fopen() failed

    return atoi(line);
}

您似乎想要:

int getNumberFromFile(const char *fileName)
{
    FILE *fp = fopen(fileName, "rb");
    int rv = 0;
    if (fp != 0)
    {
        char line[10];
        if (fgets(line, sizeof(line), fp) != 0)
            rv = atoi(line);
        fclose(fp);
    }
    return rv;
}

这不使用未初始化的变量或空指针,这两者都可能导致崩溃。