Articles of fopen

即使文件存在,c – fopen也会返回NULL

我试图fopen()在一个完整的UNIXpath,即, fopen("/dir1/file1.raw", "rb"); 该文件在那里,是rw-。 但是,fopen返回NULL。 errno说没有这样的文件或目录。 有任何想法吗?

可以使用fopen来打开URL

是fopen("tftp://1.1.1.1/file.txt","rb"); 一个有效的陈述? 在C编程中可以使用fopenurl吗?

fopen不返回

我在C程序中使用'fopen'以只读模式(r)打开一个文件。 但在我的情况下,我观​​察到fopen调用不会返回。 它不返回NULL或有效的指针 – 执行被阻止在fopen调用。 该补丁的文件是绝对正确的(我已经validation),并没有权限相关的问题。 任何人都可以告诉可能是什么原因这种行为。 任何forms的帮助都是非常可观的。 有什么和gcc或glibc有关的吗? 编辑 这里是示例代码 printf("%s %d\n",__FUNCTION__,__LINE__); if ((fp = fopen(argv[1], "r")) == NULL) { printf("%s %d\n",__FUNCTION__,__LINE__); return; } printf("%s %d\n",__FUNCTION__,__LINE__); 当我运行这个代码时,我只得到第一个打印(在调用fopen之前),之后程序停止。 所以fopen不能完成它的操作。 该文件是一个扩展名为“.conf”的简单configuration文件,该文件可以通过vi,cat等其他方式打开。不应该有任何NFS相关的问题。 文件系统是ext3。 在此先感谢,Souvik

Linux中无缓冲的I / O

我正在写很多很多的数据,这些数据在几个星期内不会被再次读取 – 因为我的程序在机器上运行的可用内存量(以“free”或“top”显示)非常快地下降,内存量应用程序使用不会增加 – 其他进程使用的内存量也不会增加。 这使我相信内存正在被文件系统caching消耗 – 因为我不打算长时间读这个数据,所以我希望绕过系统缓冲区,这样我的数据就直接写到磁盘上了。 我没有梦想改善性能或成为一个超级忍者,我的希望是给文件系统一个提示,我不会马上回来这个内存,所以不花时间优化这些情况。 在Windows上,我遇到了类似的问题,并使用FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH修复了这个问题 – 机器的内存没有被我的应用程序占用,而且机器通用性更好。 我希望能够复制我在Linux上看到的改进。 在Windows系统中,对于扇区大小的文件是有限制的,所以我很高兴这个限制了我测量的增益。 有没有类似的方式来做到这一点在Linux?

多个进程可以使用fopen附加到文件而没有任何并发​​问题?

我有一个进程以append模式打开一个文件。 在这种情况下,它是一个日志文件。 示例代码: int main(int argc, char **argv) { FILE *f; f = fopen("log.txt", "a"); fprintf(f, "log entry line"); fclose(f); } 两个问题: 如果我有多个进程附加到同一个文件,每个日志行会显示不同,或者它们可以在进程上下文切换时交错? 如果大量进程需要访问文件,会写入块吗,从而导致并发问题? 我正在考虑以最简单的forms进行此操作,或者使用zeromq将日志条目通过pipe道泵到日志收集器。 我确实考虑过系统日志,但是我并不想要软件上的任何平台依赖。 默认的平台是Linux的这个顺便说一句。

创build新的文件夹,如果它们不存在fopen

我有一个C ++程序,为用户inputfopen以启动文件写入。 有人可以帮我find一个函数,它将返回一个FILE*并使用Windows特定版本的mkdir为了创buildfopen的文件夹结构,永远不会在指定位置打开一个新文件,因为其中一个文件夹不存在。 谢谢一堆!

用fopen打开文件,在Windows上给出绝对path

我试图做一个程序,计算一个文件的行数,当我尝试将绝对path传递给fopen函数,只是告诉我没有find,这是我的代码: #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { int i=0; char array[100]; char caracteres[100]; FILE *archivo; archivo = fopen("C:\Documents and Settings\juegos psps.txt","r"); if (archivo == NULL){cout<<"Dont Work";} while (feof(archivo) == 0) { fgets(caracteres,100,archivo); i++; } cout << "Number of lines:" << i ; return 0; } 我应该如何将绝对path传递给我的程序,以便打开文件?

fopen(),fclose()是如何工作的?

我只是想知道函数fopen,fclose,socket和closesocket。 当调用fopen或打开一个套接字时,究竟发生了什么(特别是内存明智的)? 打开文件/套接字而不closures它们会导致内存泄漏? 第三,套接字是如何创build的,它们看起来像记忆方面的东西? 我也对操作系统(Windows)在读取套接字和发送数据方面的作用感兴趣。

在Windows和Linux上使用“r +”打开

我正在打开一些正在打开,阅读和修改文本文件的代码。 一个简单的例子是: #include <stdio.h> int main() { FILE * fp = fopen("test.txt", "r+"); char line[100] = {'\0'}; int count = 0; int ret_code = 0; while(!feof(fp)){ fgets(line, 100, fp); // do some processing on line… count++; if(count == 4) { ret_code = fprintf(fp, "replaced this line\n"); printf("ret code was %d\n", ret_code); perror("Error was: "); } […]

如何禁用C ++程序的VirtualStore?

当我试图在C:\驱动器的根目录(例如: FILE* FileHandle = fopen("\\file.txt", a) )的受保护位置创build文件时,我想让程序抛出一个错误。 而是在%APPDATA%下的虚拟存储中创build文件。 我怎样才能禁用该虚拟商店? 谢谢 编辑:只是要清楚,我不问如何规避安全性,并在受保护的位置创build我的文件。 我希望文件创build失败,以便我可以告诉用户他是一个白痴。