标签: file-pointer

文件描述符和文件指针之间有什么区别?

我想知道文件描述符和文件指针之间的区别.

此外,在什么情况下你会使用一个而不是另一个?

c file-descriptor file-pointer

106
推荐指数
5
解决办法
8万
查看次数

ftell文件描述符?

有没有办法在原始文件描述符而不是FILE*上执行ftell()所做的操作(返回文件中的当前位置)?我认为应该有,因为你可以使用lseek()在原始文件描述符上寻找.

我知道我可以使用fdopen()创建一个对应于文件描述符的FILE*,但我宁愿不这样做.

linux file-descriptor ftell file-pointer

34
推荐指数
1
解决办法
1万
查看次数

使用类似文件的C字符串*

我有一个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)

c file-pointer

16
推荐指数
2
解决办法
4748
查看次数

检查两个文件指针是否指向Python中的同一文件

如何检查两个文件指针是否指向同一文件.

>>> 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)

python file-pointer python-2.7 python-3.x

13
推荐指数
1
解决办法
527
查看次数

11
推荐指数
2
解决办法
3万
查看次数

以"a +"模式打开文件

如果使用以下命令打开文件:

FILE *f1=fopen("test.dat","a+");
Run Code Online (Sandbox Code Playgroud)

手册页内容如下:

A +

打开阅读和追加(在文件末尾写).如果文件不存在,则创建该文件.用于读取的初始文件位置位于文件的开头,但输出始终附加到文件的末尾.

那么f1有2个独立的偏移指针,一个用于读取,另一个用于写入?

c file-io fopen file file-pointer

9
推荐指数
1
解决办法
3万
查看次数

程序不等待用户输入scanf("%c",&yn);

这是我正在使用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)

c scanf file-pointer

8
推荐指数
1
解决办法
4万
查看次数

用C读取和写入二进制文件

这是 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 pointers binaryfiles scanf file-pointer

7
推荐指数
1
解决办法
894
查看次数

从C中的文件指针获取文件名

可能的重复:
从C中的文件描述符获取文件名
如何获取具有FILE *的fileName?

有什么办法可以从C中的文件指针中找到file_name?

fp = fopen(file,"r");
Run Code Online (Sandbox Code Playgroud)

从fp,可以获取我打开的文件名吗?

c filenames file-pointer

5
推荐指数
0
解决办法
1万
查看次数

fscanf 是否将传递的文件指针向前移动?

我在某处看到过这段代码:

#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 文档,但在阅读后找不到有关文件指针移动的任何内容。

有人可以解释一下或给出一个来源,其中指定传递的文件指针在读取后实际上会移动吗?

c file-io scanf file-pointer

5
推荐指数
1
解决办法
2万
查看次数