gpt4 book ai didi

关闭子进程中的错误文件描述符

转载 作者:行者123 更新时间:2023-11-30 17:07:36 24 4
gpt4 key购买 nike

下面是我的代码的一部分。我收到错误

bad file descriptor

我的代码有什么问题吗?为什么我的子进程无法关闭文件?

int raceme(void* v)
{
finish = 1;
sleep(4);

if ( close(fd3)!=0 )
perror("close");
if ( msync(lib_addr+PAGE_SIZE, PAGE_SIZE, MS_SYNC)<0 )
perror("msync");

return 0;
}

int main()
{
lib_addr = base;
int sz;

finish=0;

sz = sizeof(cstack) / sizeof(cstack[0]);
cpid = clone(&raceme, (void*) &cstack[sz-16], CLONE_VM|CLONE_SIGHAND|CLONE_FS|SIGCHLD, NULL );

// synchronize threads
while(!finish);
fd3 = open(EATFILE, O_CREAT|O_RDWR|O_TRUNC, 0777);
ftruncate(fd3, PAGE_SIZE);
// try to hit the kmalloc race
mmap(lib_addr+PAGE_SIZE, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, fd3, 0);
sleep(10);
return 0;

}

最佳答案

clone() 创建一个新进程,它无法再访问其父亲的数据(除非您创建共享内存)。因此子进程看不到您打开的文件描述符(fd3 = open()),因此 fd3 的值在子进程中仍然无效,从而导致错误。

关于关闭子进程中的错误文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34014050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com