c - C 中的 open() 和 write() 函数

标签 c file-io posix system-calls

我试图在 .txt 文件中写入变量 environ 的内容。

int archivo = open(argv[1], "rw");
int i=0;
while(environ[i]!=NULL){
    write(archivo, environ[i], 1024);
    i++;
}

文件已创建但未添加任何内容。有谁知道为什么吗?

最佳答案

  1. 咨询 man 2 open 以获得open 的正确参数。应该是:

    open(argv[1], O_WRONLY | O_CREAT | O_TRUNC);
    
  2. 您应该只写您实际拥有的广告:

    write(archivo, environ[i], strlen(environ[i]));
    
  3. 您必须确保您所写的内容确实离开了缓冲区:

    size_t string_length = strlen(environ[i]);
    size_t wrote = 0;
    while (wrote < string_length) {
        size_t bytes_wrote = write(archivo, environ[i] + wrote, string_length - wrote);
        if (bytes_wrote >= 0)
            wrote += bytes_wrote;
        else {
            perror("write");
            abort();
        }
    }
    

    write 不保证您提交的所有内容都会被写入。

理想情况下,您应该寻找对程序员更友好的 stdio 调用 fopenfwrite

FILE * fp = fopen(argv[1], "w");

// loop i
if (!fwrite(environ[i], strlen(environ[i]), 1, fp)) {
    perror("fwrite");
    abort();
}

关于c - C 中的 open() 和 write() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018892/

相关文章:

c - 如何在C中保存字符串的最后一个字符?

c - 系统调用 open() 权限

ios - 从管道读取 AV Assets

c - C中的类型提升

java - 写入文件的问题

c - 文件操作复制一个 .mp3 文件以创建另一个相同的文件

java - 使用 java 属性文件时出现 FileNotFoundException

C函数计算相对路径

c - C中将uint16_t和int16_t合并成int32_t进行数据传输

c - 处理数据 - C 编程