Tag: 文件描述符

作为进程子进程,如何知道哪个文件描述符是父进程

我正在尝试编写一个程序,该程序分叉并等待他的孩子完成,然后孩子在输入上做一些工作然后以与父母一样的方式分叉等等。 现在,我知道分支复制到子文件描述符数组,我应该关闭与父文件关联的那些,但我无法弄清楚哪些是父文件。 我需要给孩子这是父母的pid吗? 我一直试图在一小时的大部分时间里绕过它,我想我有一种心灵障碍,因为我无法得出结论。 TL; DR:作为子进程,我如何知道哪些文件描述符属于我的父进程?

C:stdin和std * errs

我想操纵Stdin然后操纵Std* 。 但我收到以下错误, $ gcc testFd.c testFd.c:9: error: initializer element is not constant testFd.c:9: warning: data definition has no type or storage class testFd.c:10: error: redefinition of `fd’ testFd.c:9: error: `fd’ previously defined here testFd.c:10: error: `mode’ undeclared here (not in a function) testFd.c:10: error: initializer element is not constant testFd.c:10: warning: data definition has […]

仅通过一个操作写入两个文件描述符

我想在C中实现日志记录function,并将消息记录到stdout和某个文件。 我想写一些像fprintf(logout,“msg”); 以某种方式声明FILE * logout,它将字符串重定向到stdout和一些文件。 可能吗?

分配大量文件描述符

我有兴趣通过分配大量文件描述符并导致Out-of-File-Descriptor失败来关闭系统(例如15分钟)。 (别担心,我不是想破解任何东西。这是为了测试我正在编写的服务……看看它在其他程序行为不端的行为。)任何最佳做法? 我应该继续在无限循环中说fopen()吗? 15分钟后,我可以杀死这个过程? 有没有人有这方面的经验? 更新:我正在运行Linux,我正在编写的程序将具有超级用户权限。 谢谢,〜瑜伽士

关闭/清理“混合”文件描述符/套接字

当我使用accept()创建一个套接字并使用fdopen()从中创建一个FILE时,我需要做些什么来清理所有内容? 我需要在套接字上的FILE,shutdown()和close()上执行fclose(),还是只需要shutdown()和/或close()或fclose()? 如果我不做fclose(),我是否必须手动释放()FILE指针?

C:execv之前的dup2()

对于家庭作业,我必须编写一个基本的shell,包括重定向。 该程序使用readline来提示输入,解析输入字符串,并将其分解为可执行文件名,参数和输入/输出文件(如果适用)。 在解析字符串之后,它将forx和子execv()传递给传入的可执行文件。我使用dup2()在fork之后和execv之前更改文件描述符,但是一旦遇到问题我就会遇到问题程序已执行新的可执行文件。 如果在我的shell中我运行ls > foo.out ,我得到: ls: cannot access H y A $ L H) I $ : No such file or directory 构建c-> argv: char *args[6]; int i; for(i=0;i<=4;i++){ char *_arg=strsep(&_str_cmd," "); printf("Found _arg: %s\n",_arg); // If there is an argument and it is not blank if(_arg && strcmp(_arg,"")!=0){ if(strcmp(_arg,"”)==0){ _cmd.outfile=strsep(&_str_cmd,” “); i–; […]

在fork和exec之后在父级和子级之间共享文件描述符

我在Linux,A和B上有两个进程。我想从进程A与进程B共享文件描述符,现在我只是将它序列化为char*并将其传递给execl参数,但这不起作用。 Ac看起来像这样: union descriptor{ char c[sizeof(int)]; int i; } fd; pid_t pid; fd.i = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Perform other socket functions pid = fork(); if(pid == 0){ // Read data from socket if(execl(“./B”, fd.c, NULL) < 0){ exit(EXIT_FAILURE); }else( exit(EXIT_SUCCESS); } }else if(pid < 0){ exit(EXIT_FAILURE); }else{ waitpid(pid, NULL, 0); } Bc看起来像这样: union descriptor{ […]

如何确定文件描述符是否可搜索?

是否有任何可移植的方式(在POSIX系统上)来确定文件描述符是否可搜索? 我的想法是使用lseek(fd, 0, SEEK_CUR); 并检查返回值是否为-1,但我不确定这是否会给出假阴性或误报。 使用fstat并假设哪些类型的文件是可搜索/不可搜索的并不是一个好主意。 还有其他想法吗?

是否需要在退出前关闭文件描述符?

当然,大多数情况的直接答案是“是” ,我坚信一个进程应该正确清理它已分配的任何资源,但我的情况是一个长期运行的系统守护进程打开一个固定的启动时的文件描述符数量,并在退出前将它们全部关闭。 这是一个嵌入式平台,我正在努力使代码尽可能紧凑,同时不引入任何不良风格。 但是,由于文件描述符无论如何都会在退出之前关闭,这个文件描述符清理代码是否可以用于任何目的? 你总是关闭所有文件描述符吗?

如何以编程方式获取OS X上给定PID的打开文件描述符列表?

我见过的所有东西都说使用lsof -p ,但我正在寻找一些不需要fork / exec的东西。 例如在Linux上,可以简单地走/proc/{pid}/fd 。