可能重复:
如何确定C中文件的大小?
如何找出用C语言编写的应用程序打开的文件大小?我想知道大小,因为我想把加载文件的内容放入一个我分配的字符串中malloc().只是写作malloc(10000*sizeof(char));是恕我直言,一个坏主意.
在Visual Studio 2005 C++编译器上,当我的代码使用fopen和此类调用时,我收到以下警告.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
我想知道在使用fopen(不是open)打开文件时是否有办法在Linux中锁定和解锁文件?
基于Stack Overflow问题C fopen vs open,fopen优先于open.
如何通过创建和删除锁定文件来实现我自己的文件锁(如果可能)?
我收到此警告,但所有功能都正常工作.
这究竟意味着什么?
'strcpy': This function or variable may be unsafe.
Consider using strcpy_s instead. To disable deprecation,
use _CRT_SECURE_NO_WARNINGS. See online help for details.
Run Code Online (Sandbox Code Playgroud) 我有这样的代码:
f1 = open('file1', 'a')
f2 = open('file1', 'a')
f1.write('Test line 1\n')
f2.write('Test line 2\n')
f1.write('Test line 3\n')
f2.write('Test line 4\n')
Run Code Online (Sandbox Code Playgroud)
当使用标准Python 2.7解释器运行此代码时,该文件包含预期的四行.但是,当我在PyPy下运行此代码时,该文件只包含两行.
有人可以解释Python和PyPy在附加模式下处理文件时的区别吗?
更新:PyPy 2.3中不存在该问题.
我正在为一个类的项目工作,我们得到一个包含以下代码的.c文件:
int fd = -1;
if (fd < 0)
{
fd = open ("my_dev", O_RDWR);
if (fd < 0)
{
perror ("open");
return -1;
}
...
Run Code Online (Sandbox Code Playgroud)
所以我理解它正在尝试打开一个具有读/写权限的文件"my_dev",然后在成功时返回文件描述符或者在失败时返回负值,但我不明白为什么它给了我"权限被拒绝"始终如一.我试着使用这段代码:
int des = open("my_dev", O_CREAT | O_RDWR, 0777);
...
close(des)
Run Code Online (Sandbox Code Playgroud)
打开/创建文件(这是在另一个块之前调用),但这不起作用,但如果我只是使用它:
FILE* file = fopen("my_dev","w+");
fprintf(file,str);
fclose(file);
Run Code Online (Sandbox Code Playgroud)
我可以写入文件,这意味着我有写权限.现在通常情况下,我只会使用fopen和fprintf来处理所有事情,但对于这个项目,我们必须使用教师的.c文件,它将尝试使用
open()
Run Code Online (Sandbox Code Playgroud)
这将导致"权限被拒绝"错误,这反过来会搞砸我的代码.
我想我的问题是fopen和open是如何相互关联的?每个人似乎都能够背诵open是一个系统调用,而fopen是一个标准的lib函数,但我似乎无法找到一个明确的答案,我可以用fopen()创建一个可以通过open()打开的文件一个"权限被拒绝"的错误,或者我如何创建一个open()文件然后我可以写入,关闭并再次打开open().
简而言之,如何在C中创建一个我可以写入的文件,稍后用open(O_RDWR)打开?
对不起,如果这是一个小小的,我非常累.
PS:应该注意的是我正在大学计算机上编译和运行,因此权限可能是"怪异的"但是应该注意的是,如果我使用终端命令"dd"创建文件,open()将起作用,此外,我显然有一些写权限,因为我确实可以使用fopen和fprintf写入该文件
我正在与一位老师交谈,他告诉我读写系统调用正在使用缓冲区,因为系统规范中有一个变量控制您可以访问要读取/写入的设备的次数,并且当他等待在设备上写入时,系统使用缓冲区来存储数据。
我在另一篇 Stack Overflow 帖子(C fopen vs openfopen )上看到和函数的优点之一fwrite是这些函数使用缓冲区(这应该更快)。read我已经阅读了和sys call的手册页write,并且手册页没有讨论任何缓冲区。
我是不是误会了什么?read/ writeC 系统调用缓冲区如何工作?
我试图读取给定的文件然后标记它.我唯一的问题是fgets.文件打开收到没有错误.我在网站的其他地方已经看到了这个,但无论我如何设置它包括将fileLine设置为设定量(如char fileline [200])我得到分段错误.在此先感谢您的帮助.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[]){
char *fileName = "0";
char *tokenize, *savePtr;
struct Record *database= malloc(sizeof(database[0]));
int recordNum =0;
char *fileLine = malloc(sizeof(char *));//have replaced with fileline[200] still didnt work
FILE *fd = open(fileName,O_RDWR);
if(fd< 0){
perror("ERROR OPENING FILE");
}
while(fgets(fileLine,200,fd) !=NULL){
printf("%s\n", fileLine);
tokenize = strtok_r(fileLine,",",&savePtr);
while(tokenize != NULL){
//TOKENIZING into a struct
}
}
Run Code Online (Sandbox Code Playgroud) 这个问题问完之后,一个疑问就来了:
一旦fopen()比open()更快(至少对于顺序写入/就绪操作),前者是一个库,后者是一个系统调用,那么fopen()在 POSIX 兼容操作系统中执行什么系统调用?
见标题.
如何实现与此问题相反的方法:如何从fopen FILE结构中获取文件HANDLE?
我创建了句柄
HANDLE h = CreateFile(name,
GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
Run Code Online (Sandbox Code Playgroud)
然后尝试使用它写一些数据fputs.
fputs线路上的呼叫失败
_VALIDATE_STREAM_ANSI_RETURN(stream, EINVAL, EOF);
Run Code Online (Sandbox Code Playgroud)
stream我从哪里获得的手柄CreateFile.
我这样做的原因是我使用了一个使用FILE*句柄的外部库,我没有打开普通文件(直到现在),而是试图写入管道.并且不能更改外部库.
c ×9
fopen ×3
c++ ×2
io ×2
read-write ×2
visual-c++ ×2
deprecated ×1
fgets ×1
file ×1
large-files ×1
linux ×1
permissions ×1
posix ×1
pypy ×1
python ×1
size ×1
system-calls ×1
winapi ×1