zoukankan      html  css  js  c++  java
  • Unix系统编程(二)open的练习

    在上一篇中学习了一下open函数的基本用法,这里就要练习一下。计算机就是要实践嘛。

    用open创建一个文件

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>
    
    int main() {
            int fd;
            fd = open("abc", O_CREAT, 0777);
            printf("fd=%d
    ", fd);
    
            return 0;
    }

    open函数第二个参数是文件打开的标志,比如只读(O_RDONLY)等,还有副标志(O_CREAT,O_TRUNC)等。主标志是互斥的,但是我不知道居然可以不指定主标志,而只用副标志。

    然后第三个参数指定了创建文件的权限位。

    open()一个文件,返回的描述符从3开始增加(0,1,2分别是标准输出,标准输入和标准错误)

    由于umask一开始是022(我用的是root),所以创建出来的权限不是777,而是755,设置umask为000之后再执行以下创建出的abc的权限位就是777了。

    传入参数作为文件名

    /*
     * open a file with pathname from arguments
     * tuhooo
     */
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    
            int fd;
    
            if(argc < 2) {
                    printf("usage: ./open filename
    ");
                    exit(1);
            }
    
            if((fd = open(argv[1], O_CREAT | O_RDWR, 0644)) == -1) {
                    printf("file open error!
    ");
                    exit(1);
            }
    
            printf("fd = %d
    ", fd);
    }

     原来O_CREAT如果在文件存在的时候不会去创建的,我还以为会把原来文件的内容清空呢。

    果然在标志位加上O_TRUNC之后文件的内容就被清空掉了。

    直接在权限位写数字是不是有点硬编码了。

    open一个文件,不存在则创建并写东西

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
    
            int fd;
            char buf[1024] = "hello, world
    this is first sentence I write to this file";
    
            /* argc */
            if(argc < 2) {
                    printf("./open filename
    ");
                    exit(1);
            }
    
            /* if open file correctly */
            if((fd = open(argv[1], O_CREAT | O_RDWR, 0644)) == -1) {
                    printf("open file error
    ");
                    exit(1);
            }
    
            /* write something */
            write(fd, buf, strlen(buf));
            printf("fd = %d
    ", fd);
            /* close fd */
            close(fd);
            return 0;
    }

    这个例子看上去还挺简单的,就是加了一个write函数在这里了。

    好像这就把open函数学完了,掌握了这几个例子,打开或者创建文件就不是问题啦。

    原文:https://blog.csdn.net/tengfei_scut/article/details/70213099

  • 相关阅读:
    Nginx和PHP-FPM的启动、重启、停止脚本分享
    [Linux]Fedora19修复被Windows干掉的引导
    [Linux]RHEL/CentOS6配置tomcat使用80端口(与httpd整合)
    [Linux]SAMBA共享打印机
    [Linux]配置Logwatch使用第三方smtp发送电子邮件
    [oVirt]在双网卡网络环境下使用oVirt LiveCD
    走进Linux世界主题讲座纪录
    mysql用户及权限复制
    记一次失败的K8S安装部署
    HTTP状态码与爬虫
  • 原文地址:https://www.cnblogs.com/tuhooo/p/8638076.html
Copyright © 2011-2022 走看看