我想知道文件描述符和文件指针之间的区别.
此外,在什么情况下你会使用一个而不是另一个?
有没有办法在原始文件描述符而不是FILE*上执行ftell()所做的操作(返回文件中的当前位置)?我认为应该有,因为你可以使用lseek()在原始文件描述符上寻找.
我知道我可以使用fdopen()创建一个对应于文件描述符的FILE*,但我宁愿不这样做.
我有一个C函数,可以从中读取字符流FILE*.
FILE*在这种情况下,我如何从字符串创建一个?
编辑:
我认为我的原帖可能会产生误导.我想FILE*从一个文字字符串值创建一个,以便生成的结果FILE*就像某个文件某处包含字符串而不实际创建文件一样.
以下是我想做的事情:
void parse(FILE* f, Element* result);
int main(int argc, char** argv){
FILE* f = mysteryFunc("hello world!");
Element result;
parse(f,&result);
}
Run Code Online (Sandbox Code Playgroud) 如何检查两个文件指针是否指向同一文件.
>>> fp1 = open("/data/logs/perf.log", "r")
>>> fp1
<open file '/data/logs/perf.log', mode 'r' at 0x7f5adc07cc00>
>>> fp2 = open("/data/logs/perf.log", "r")
>>> fp2
<open file '/data/logs/perf.log', mode 'r' at 0x7f5adc07cd20>
>>> fp1 == fp2
False
>>> fp1 is fp2
False
Run Code Online (Sandbox Code Playgroud)
我的用例是我正在查看文件以进行更改并执行某些操作,但是logback将此文件滚动到旧日期并创建新文件.但是python中的文件指针变量仍然指向旧文件.如果fp1 != fp2,我想更新fp1到新文件.
为什么.name不起作用?我试过的时候
mv /data/logs/perf.log /data/logs/perfNew.log
echo abctest >> /data/logs/perfNew.log
Run Code Online (Sandbox Code Playgroud)
即便如此,这个名字仍然是旧名称.
>>> fp1.readline()
'abctest\n'
>>> fp1.name
'/data/logs/perf.log'
Run Code Online (Sandbox Code Playgroud) 如果使用以下命令打开文件:
FILE *f1=fopen("test.dat","a+");
Run Code Online (Sandbox Code Playgroud)
手册页内容如下:
A +
打开阅读和追加(在文件末尾写).如果文件不存在,则创建该文件.用于读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾.
那么f1有2个独立的偏移指针,一个用于读取,另一个用于写入?
这是我正在使用C语言编写的程序的基本代码.我试图检测输出文件是否已经存在,如果它确实存在,我想询问用户是否要覆盖它.这就是我首先使用fopen(outfilename,"r")打开outfilename文件的原因; 而不是fopen(outfilename,"w");.
它检测文件不存在的情况,但是,如果它确实存在则执行printf("输出文件已存在,覆盖(y/n):"); 声明但完全忽略了scanf("%c",&yn); 声明!
如果文件不存在,程序末尾的printf读取"yn = 0",如果存在,则读取"yn =".有谁能够帮我?
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <string.h>
int main(void) {
FILE *inf;
FILE *outf;
char filename[21],outfilename[21];
char yn='0';
printf("Please enter an input filename: ");
scanf("%s",&filename);
printf("Please enter an output filename: ");
scanf("%s",&outfilename);
/* Open file for reading */
inf=fopen (filename,"r");
outf=fopen(outfilename,"r");
/*check that input file exists*/
if (inf!=NULL) {
/*check that the output file doesn't already exist*/
if (outf==NULL){
fclose(outf);
/*if it doesn't already exist create file by opening in …Run Code Online (Sandbox Code Playgroud) 这是 2 个独立的应用程序。
emp.bin.我尝试分别打印每个字符,结果发现名称中的每个字母后面都有 3 个空字符 '\n',这就是它不在第一个字符后面打印的原因。
“编写”应用程序代码:
//Receives records from keyboard and writes them to a file in binary mode
#include <stdio.h>
int main()
{
FILE *fp;
char another = 'Y';
struct emp
{
char name[40];
int age;
float bs;
};
struct emp e;
fp = fopen("emp.bin", "wb");
if (fp == NULL)
{
puts("Cannot open the file.");
return 1;
}
while(another == 'Y')
{
printf("Enter the employee name, age and salary: ");
scanf("%S %d %f", …Run Code Online (Sandbox Code Playgroud) 有什么办法可以从C中的文件指针中找到file_name?
fp = fopen(file,"r");
Run Code Online (Sandbox Code Playgroud)
从fp,可以获取我打开的文件名吗?
我在某处看到过这段代码:
#include<stdio.h>
int main()
{
FILE * fp;
char s[1024];
fp = fopen("file","r");
while( fscanf(fp, "%s", s ) != EOF )
{
puts(s);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我预计这将继续无限循环地打印文件的第一个单词。我相信文件指针被视为输入只是为了获取应该读取输入的点,而 fscanf 将有一个本地文件指针,它将用来读取文件。
但在运行时我意识到它实际上打印了整个文件。我能得出的唯一结论是,在读取第一个输入后,它实际上将传递的文件指针向前移动,否则它只会一次又一次地继续打印第一个单词。
我看到了fscanf 的man 文档,但在阅读后找不到有关文件指针移动的任何内容。
有人可以解释一下或给出一个来源,其中指定传递的文件指针在读取后实际上会移动吗?
file-pointer ×10
c ×8
file-io ×3
scanf ×3
file ×2
pointers ×2
binaryfiles ×1
filenames ×1
fopen ×1
ftell ×1
linux ×1
python ×1
python-2.7 ×1
python-3.x ×1