c - 想在 C 中创建一个写模式的文件

标签 c linux bash gcc

我是C新手,我想在linux C程序中创建一个文件,并在其中写入环境变量。如果文件已经存在,我想打开并追加。我写了下面的代码。

        char *envFile=getenv("FILENAME");   
        int fdEnv=-1;       
        fdEnv=open(envFile,O_CREAT,O_RDWR,O_APPEND);

        printf("%d",fdEnv);
        char** env;
        if(fdEnv>0)
        {
            for (env = environ; *env != 0; env++)
            {
                char *thisEnv = *env;       

                printf("%s",thisEnv);
                write(fdEnv,thisEnv,strlen(thisEnv));
            }
            close(fdEnv);

        }

但是当我第一次运行它时。创建一个空白文件。它在执行后保持锁定状态。看起来像一些错误。第二次 fdEnv 保持小于 0。

我真的不明白这里发生了什么。请帮忙。

最佳答案

尝试使用 | 来分隔标志。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

extern char **environ;
int main(void)
{
    char *envFile = getenv("FILENAME");
    int fdEnv = -1;
    fdEnv = open(envFile, O_CREAT|O_RDWR|O_APPEND, 0644);
    printf("%d\n", fdEnv);
    int i = 0;
    while (environ[i]) {
        printf("%s\n", environ[i]);
        write(fdEnv, environ[i], strlen(environ[i]));
        char lf = '\n';
        write(fdEnv, &lf, 1);
        i++;
    }
    close(fdEnv);
    return 0;
}

我已经在我的 linux 计算机上运行了上面的代码并且它有效。

关于c - 想在 C 中创建一个写模式的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540001/

相关文章:

php - CentOS安装php-mbstring报错

c++ - ARM 平台上的嵌入式 Linux 交叉编译 Clion

bash - 从类似 csv 的 txt 文件将十六进制转换为十进制

linux - 用于自动过程的 Cronjob

c - Matlab 用 mex 编译 C 文件时出错

c - while ... readdir 导致段错误

c - 为什么这个 C 代码没有生成预期的输出?

Linux Shell - 字符串操作然后以分钟为单位计算文件的年龄

c - udev:我需要在 linux 上为 pendrive 使用 udev

linux - shell 源代码和可执行文件位于哪个目录中?