使用 dup2 和 printf 写入文件的麻烦

trouble to write in a file with dup2 and printf

我遇到了这个简单代码的问题:

int main(int argc, char const *argv[]) {
  int fichier = open("ecrire.txt", O_APPEND | O_WRONLY | O_CREAT);

  dup2(fichier, 1);

  printf("test");
  return 0;
}

我只需要用 dup2 和 printf 在我的文件上写 "test"。但是没有任何附加到文件。

谢谢,如果你有解决方案

您的示例确实适用于适当的 headers,但它提供的文件权限仅允许 root 用户在此程序创建文件后读取该文件。所以我为用户添加了读写权限。我还删除了 O_APPEND 因为你说你不想追加:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
  int fichier = open("ecrire.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);

  dup2(fichier, 1);

  printf("test");
  return 0;
}

下面建议代码

  1. 干净地编译
  2. 执行所需的功能
  3. 正确检查错误
  4. 包含所需的 #include 语句。

现在建议的代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

int main( void )
{
    int fichier = open("ecrire.txt", O_APPEND | O_WRONLY | O_CREAT, 0777);
    if( 0 > fichier )
    {
        perror( "open failed" );
        exit( EXIT_FAILURE );
    }

    // IMPLIED else, open successful

    if( dup2(fichier, 1) == -1 )
    {
        perror( "dup3 failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, dup2 successful

    printf("test");
    return 0;
}

在 linux 这个命令上:

ls -al ecrire.txt displays

-rwxrwxr-x 1 rkwill rkwill 4 Apr 19 18:46 ecrire.txt

浏览文件内容:

less ecrire.txt 

结果:

test