Tag: fopen

没有fopen()的读文件(C语言)

我正在开展一个学校项目,我们必须在保存在.txt文件中的表上执行一些操作(select,min,max)。 问题是我们不能使用常见的函数,如fopen,fscanf,fclose。 该程序将从命令行启动,如下所示: .\project.exe select parameters <table.txt 你有一些想法如何在不使用fopen的情况下将.txt文件的内容转换为stdin吗? 谢谢。

在“r +”模式下打开时,在C中清除/截断文件

我的代码目前看起来像这样(这些步骤分为多个函数): /* open file */ FILE *file = fopen(filename, “r+”); if(!file) { /* read the file */ /* modify the data */ /* truncate file (how does this work?)*/ /* write new data into file */ /* close file */ fclose(file); } 我知道我可以在”w”模式下打开文件,但在这种情况下我不想这样做。 我知道在unistd.h / sys/types.h有一个函数ftruncate ,但是我不想使用这些函数,我的代码应该是高度可移植的(在windows上也是如此)。 是否有可能在不关闭/重新打开文件的情况下清除文件?

K&R fopen和fillbuf中C的分段错误

我对C.很新。我在研究K&R的最后一章时遇到了一个问题。 我正在尝试通过使用系统调用, open和read来实现fopen()和fillbuf()函数。 我完全复制了书中的源代码,但在编译后反复出现分段错误。 fp->fd = fd; fp->cnt = 0; fp->base = NULL; fp->flag = (*mode==’r’)? _READ : _WRITE; 为什么会出现错误? 这是我的完整代码。 #include #include #include #define PERM 0644 #define EOF (-1) #define BUFSIZE 1024 #define OPEN_MAX 20 typedef struct _iobuf{ int cnt; char *ptr; char *base; int flag; int fd; } myFILE; enum _flags { _READ […]

linux中c“fopen”可以打开的最大文件数

c fopen可以在Linux中同时打开的最大文件数是多少?

fopen()返回一个NULL指针,但该文件肯定存在

我的代码如下: FILE *txt_file = fopen(“data.txt”, “r”); if (txt_file == NULL) { perror(“Can’t open file”); } 返回的错误消息是: 无法打开文件:没有这样的文件或目录 文件’data.txt’肯定存在于工作目录中(它存在于包含我的.c和.h文件的目录中),那么为什么fopen()返回一个NULL指针?

当使用gets来获取C中的文件名时,文件会打开,但是当使用fgets时它不会

我在C中尝试从用户输入中获取字符串,以便程序可以打开所选文件。 我尝试使用fgets,因为我在很multithreading上读到它是更安全的选项(而不是获取)。 但是,当使用gets存储字符串时,文件会打开,但是fgets不会。 这是我正在使用的代码: char csvFile[256]; FILE *inpfile; printf(“Please enter CSV filename: “); fgets(csvFile,256,stdin); printf(“\nFile is %s\n”,csvFile); inpfile = fopen(csvFile,”r”); if(inpfile == NULL) { printf(“File cannot be opened!”); } 我知道文件存在,但是fgets输入了if块。 唯一的区别是使用: gets(csvFile); 取代的 fgets(csvFile,256,stdin); 任何人都可以帮我理解这个吗? 提前致谢。

fopen()不在C中工作

我修好了。 谢谢你的帮助。 我现在看了很多文章,论坛post和主题; 然而,没有人真正解决我的问题。 问题是我的fopen(“file.txt”, “w”); 不创建文件。 码: // //Includes #include int main () { FILE *receipt = fopen(“receipt.txt”, “w”); //Create file fprintf(receipt, “Price: %.2f$”, purchase); fprintf(receipt, “\nDiscount: %.2f$”, discount); fprintf(receipt, “\nTax %%: %.2f%%”, tax_pct); fprintf(receipt, “\nTaxes: %.2f$”, tax); fprintf(receipt, “\nTotal Price: %.2f$”, end_price); fprintf(receipt, “\n\nEnd of Receipt.”); fclose(receipt); return 0; } 我试过投入 if(!receipt) { […]

为什么fwrite()在Mac OS X上使用C中的“wb”写入二进制文件?

为了学习C并理解二进制文件和文本文件之间的区别,我试图将一个字符串写入文件,因为两种文件类型都是这样的: char * string = “I am a string!”; FILE * filePtrA = fopen(“/output.txt”, “wt”); fwrite(string, strlen(string), 1, filePtrA); FILE * filePtrB = fopen(“/output.bin”, “wb”); fwrite(string, strlen(string), 1, filePtrB); fclose(filePtrA); fclose(filePtrB); 但是”wt”和”wb”都是作为文本文件写入的,其中”wb”应该写为二进制文件。 Hex对于这两个文件都是这样的: 49 20 61 6D 20 61 20 73 74 72 69 6E 67 21 为什么会发生这种情况,我怎样才能将内容写成二进制文件? 我已经读过操作系统(Mac OS X 10.6 – GCC 4.2)可能无法区分二进制文件和文本文件,但我仍然难以理解为什么hex编辑器不会发现任何差异。

fopen后检测文件删除

我正在使用检测文件(日志文件)中的更改的代码,然后在fseek和ftell的帮助下处理更改。 但是如果文件被删除和更改(使用logrotate),程序会停止但不会死亡,因为它不会检测到更多更改(即使重新创建文件)。 fseek不显示错误和eiter ftell。 我怎么能检测到该文件删除? 也许是一种用其他FILE * var重新打开文件并比较文件描述符的方法。 但我怎么能这样做。 ?

以“a +”模式打开文件

如果使用以下命令打开文件: FILE *f1=fopen(“test.dat”,”a+”); 手册页内容如下: A + 打开阅读和追加(在文件末尾写)。 如果文件不存在,则创建该文件。 用于读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾。 那么f1有两个独立的偏移指针,一个用于读取,另一个用于写入?