我知道之后,父fork()
级打开的所有文件(及其偏移量)都由
子级共享。即父子共享所有文件的文件表项。
如果孩子打开某个文件会发生什么。是专门针对孩子的吗?还是由父母共享?
我还编写了小型测试程序。这是测试这个的正确方法吗?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define FLAG (O_RDWR | O_CREAT | O_TRUNC)
int main(int argc, char *argv[])
{
pid_t pid;
if ((pid = fork()) < 0) {
perror("fork error");
exit(1);
} else if (pid == 0) {
int fc;
if ((fc = open("abc", FLAG)) == -1) {
perror("cannot open abc");
exit(-1);
}
exit(fc);
//returning the file descriptor open through exit()
} else {
int fp;
wait(&fp);
if (fp == -1)
exit(1);
if (fcntl(fp, F_GETFD) == -1)
perror("doesn't work"); //Ouputs: doesn't work: Bad file descriptor
//returns file descriptor flags
//should not return error, if fd is valid
}
return 0;
}
谢谢。