【发布时间】:2012-07-20 14:14:45
【问题描述】:
我想从 txt 文件中读取并在其中附加下一个数字,我也想使用 fork 作为第二个进程。在以下代码中,我需要帮助来解锁文件。我无法解锁文件。
int main() {
int x;
pid_t child = fork();
FILE *file;
//flock(fileno(file),LOCK_EX);
file = fopen ("list.txt", "r");
//printf("file is locked");
int fdSource = (int)file;
if (fdSource > 0){
if (lockf(fdSource, F_LOCK, 0) == -1)
x = readValue(file);
return 0; /* FAILURE */
}
else {
return 1;
}
if (lockf(fdSource, F_ULOCK, 0) == -1){
printf("file is not lock");
appendValue(x);
}
else {
return 1;
}
appendValue(x);
}
【问题讨论】:
-
int fdSource = (int)file;不对。查看fileno(3)的手册页。 -
谢谢,但如果在此之前不使用 (int) 我会出错并建议转换它
-
在 C 语言中 99.999999% 的情况下,强制删除警告是一个大错误。使用我上面提到的函数从
FILE*获取文件描述符。 -
您的代码使用的是
lockf();你的标题最初是flock()。您可以使用其中任何一个,或使用fcntl()(如此令人尴尬的财富)来进行锁定,但您应该是自洽的。 -
另请注意,锁(通常)是建议性的,不是强制性的。也就是说,除非它检查文件是否被锁定,否则您的子进程将不会受到持有文件锁定的父进程的阻碍。还要注意,系统调用使用文件描述符,而不是文件流(文件指针)。如果必须打开文件流,则使用
fileno(fp)获取文件流的文件描述符。名称fd常用于文件描述符,名称fp常用于文件流。