Tag: 文件描述符

O_NONBLOCK是否设置了文件描述符或基础文件的属性?

从我在Open Group网站上read fcntl , open , read和write ,我得到的印象是O_NONBLOCK是否设置在文件描述符上,因此非阻塞I / O是否与描述符一起使用,应该是该文件描述符的属性而不是底层文件。 例如,作为文件描述符的属性意味着,如果我复制文件描述符或打开另一个描述符到同一文件,那么我可以使用阻塞I / O和一个非阻塞I / O与另一个。 然而,尝试使用FIFO,似乎不可能同时为FIFO提供阻塞I / O描述符和非阻塞I / O描述符(因此,是否设置O_NONBLOCK是基础文件的属性[FIFO] ]): #include #include #include #include #include int main(int argc, char **argv) { int fds[2]; if (pipe(fds) == -1) { fprintf(stderr, “`pipe` failed.\n”); return EXIT_FAILURE; } int fd0_dup = dup(fds[0]); if (fd0_dup <= STDERR_FILENO) { fprintf(stderr, […]

如何从文件描述符执行程序?

当我只知道描述符时,我需要执行一个文件。 也有可能没有链接到文件,所以找不到名称不是一个选项。 所有execve(),execvp()等函数都采用文件名。 dlopen()也有一个名字。 丑陋的解决方案(如读取文件和调用某些函数指针)都可以。

C获取所有打开的文件描述符

我想在我的C程序中实现行为,这样如果发生SIGINT,我会关闭所有打开的文件描述符。 有一个简单的方法来获取它们的列表?

C:如何将stderr从System-command重定向到stdout或文件?

shell命令$ avrdude -c usbtiny文本输出到stderr。 我无法通过诸如head-less-more之类的命令来阅读它。它不是stdout。 我希望文本stdout或文件。 我怎么能用C做呢? 我试图通过我的上一个问题解决问题,但仍未解决。

fclose和close之间的区别

如果我fopen一个文件,调用fclose或close之间有什么区别?我应该使用哪一个? 如果分叉的孩子也可以访问该文件,他们完成文件后应该怎么做?

没有read()清空或“刷新”文件描述符?

(注意:这不是如何刷新write() 。这是它的另一端 ,可以这么说。) 是否可以清空一个文件描述符,其中包含要读取的数据, 而不必read()它? 您可能对数据不感兴趣,因此阅读它们会浪费您可能更好地使用的空间和周期。 如果在POSIX中不可能,那么任何操作系统都有任何不可移植的方法吗? 更新:请注意我正在谈论文件描述符 , 而不是流。

写入子进程文件描述符

我有一个程序“Sample”,它从stdin和非标准文件描述符(3或4)获取输入,如下所示 int pfds[2]; pipe(pfds); printf(“%s”,”\nEnter input for stdin”); read(0, pO, 5); printf(“\nEnter input for fds 3”); read(pfds[0], pX, 5); printf(“\nOutput stout”); write(1, pO, strlen(pO)); printf(“\nOutput fd 4”); write(pfds[1], pX, strlen(pX)); 现在我有另一个程序“Operator”,它使用execv在子进程中执行上述程序(Sample)。 现在我想要的是通过“运算符”向“Sample”发送输入。

C的printf和fprintf(stdout,)没有打印

这有点奇怪。 我的代码没有输出我认为应该的东西。 我在各个阶段添加了一些打印语句,以查看它出错的地方。 依然没有。 所以我在main的开头添加了一个printf语句。 这就是我真的很困惑的地方。 所以我假设文件描述符发生了一些有趣的事情。 我将printf更改为fprintf 。 依然没有。 使用fprintf打印到stderr确实有效! 为什么会这样? 除了初始打印语句之外,从main中删除所有主体并返回打印。 码 int main(void) { fprintf(stdout, “STARTED!”); //Create an Internet domain socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); //If this fails exit and print the error if (sockfd == -1) { printf(“Error %d, cannot create socket”, errno); return 1; } printf(“SOCKET CREATED!”); //Creates […]

O_LARGEFILE只需要写一个大文件吗?

如果我想要做的就是写一个大文件( O_WRONLY )或附加到一个大文件( O_APPEND | O_WRONLY ),是否需要O_LARGEFILE标志? 从我在CLucene-dev邮件列表上读到的标题为“ 无法写入> 2gb 索引文件 ”的post中,可能需要O_LARGEFILE来编写大文件,但该讨论中的参与者使用的是O_RDWR ,而不是O_WRONLY ,所以我是不确定。

为什么open打开我的文件描述符0?

我正在使用管道和分支的程序,需要将写入结束更改为输出文件。 但是当我打开一个文件时,文件描述符是0,通常是stdin,但我认为这是我的一些问题的原因。 这是我的代码 if (outputfd = open(“file”, O_RDWR | O_CREAT | O_TRUNC) == -1) { // open failed } 有人能告诉我为什么它是0吗? 或者如何修复它?