2014-04-30 21:16 GMT-07:00 <
xhy42...@gmail.com>:
> 谢谢你的回答!
> 我现在理解了文件描述符是什么
> 但是还有两点疑惑是:
>
> 为了恢复一个进程,其中一个模块是,在进程正常运行过程中
> 对其打开文件表进行保存
> 然后进程出错时候,创建一个新的进程,将保存的打开文件表内容
> 再填入新的进程的打开文件表中(这是我的思路。。)
>
> 疑惑一:
> 我现在不知道,对于进程的打开文件表该存储哪些东西
这取决于文件的类型。普通文件可能只是 pos,length等,
而 socket 就复杂了,比如 TCP socket 至少还需要 (srcIP, srcPort,dstIP, dstPort)
等连接相关的信息。
>
> 我的想法是
> 1.通过fd找到文件
> 通过stat(filename,struct stat *) 可以得到
> fd,filename,file_data,mode(文件类型),length(文件长度)
> 2.另外从 /proc/<pid>/fdinfo/<FD>中可以得到 pos(指针偏移量) 和 flags(文件标志)
>
> 查阅了一些资料
> 貌似还需要对struct termios 和struct fcntl_data_t这个两个东西进行保存...
> 想咨询一下您,这两个是什么?需要保存并恢复吗?
termios 应该是 tty 相关的信息,你可以自行 google 一下。
fcntl 应该是通过 fcntl() 设置的信息,比如 NONBLOCK。
>
> 疑惑二:
> 我该怎么将保存的内容写入到一个新的进程的打开文件表中
>
做一个逆操作,比如 fcntl(GETFL...) 得到的信息就通过 fctnl(SETFL) 写回去。