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

时间:2015-02-18 03:26:33

标签: c process operating-system fork

我有一个读取文件并返回整数的函数。有两个进程使用相同的功能,我得到一个分段错误。

阅读功能:

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");
}

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

3 个答案:

答案 0 :(得分:3)

您的问题与线程无关。

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

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

答案 1 :(得分:2)

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

聚苯乙烯。从多个进程读取文件没有问题。

答案 2 :(得分:1)

无论您使用该功能有一个还是两个进程,都会出现问题;功能有问题。您没有分配任何空间来阅读该行:

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;
}

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