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;
}
这不使用未初始化的变量或空指针,这两者都可能导致崩溃。
我有一个读取文件和 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;
}
这不使用未初始化的变量或空指针,这两者都可能导致崩溃。