使用 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;
}
下面建议代码
- 干净地编译
- 执行所需的功能
- 正确检查错误
- 包含所需的
#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
我遇到了这个简单代码的问题:
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;
}
下面建议代码
- 干净地编译
- 执行所需的功能
- 正确检查错误
- 包含所需的
#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