c语言中的creat()函数使用及参数详解

22 篇文章 1 订阅

头文件:#include <sys/types.h>   #include <sys/stat.h>   #include <fcntl.h>

  1. #include <fcntl.h>                          // 提供open()函数  
  2. #include <sys/types.h>                      // 提供mode_t类型  
  3. #include <sys/stat.h>                       // 提供open()函数的符号  
  4. #include <unistd.h>                         // 提供close()函数

定义函数:int creat(const char * pathname, mode_tmode);

函数说明:
1、参数 pathname 指向欲建立的文件路径字符串。
2、Creat()相当于使用下列的调用方式调用open()
    open(const char * pathname, (O_CREAT|O_WRONLY|O_TRUNC));
  

     filename:要创建的文件名(包括路径,默认当前路径)

     mode:创建模式,指定用户操作权限(针对三种用户设置:所处用户,所处用户组,其他用户

                               权限:读,写,执行)

(0表示没有任何权限

     S_IRUSR可读,1

     S_IWUSR可写,2

     S_IXUSR可执行,4

    S_IRWXR可读、写、执行)7(也可以用数字代替,如0777)

返回值:文件描述符,值为一个整数,发生错误时返回-1

返回值:
creat()会返回新的文件描述词, 若有错误发生则会返回-1, 并把错误代码设给errno.

错误提示:
EEXIST参数:pathname 所指的文件已存在.
EACCESS参数:pathname 所指定的文件不符合所要求测试的权限
EROFS:欲打开写入权限的文件存在于只读文件系统内
EFAULT参数:pathname 指针超出可存取的内存空间
EINVAL参数:mode 不正确.
ENAMETOOLONG参数:pathname 太长.
ENOTDIR 参数:pathname 为一目录
ENOMEM :核心内存不足
ELOOP 参数:pathname 有过多符号连接问题.
EMFILE:已达到进程可同时打开的文件数上限
ENFILE:已达到系统可同时打开的文件数上限

ps:1.什么是文件描述符?

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为您提供一个简单的模拟shell程序的设计方案。 1. 命令解析 首先,我们需要读取用户输入的命令,并解析出命令参数和要执行的程序。这可以通过使用C语言的标准输入输出库和字符串处理库来实现。 具体步骤如下: - 使用fgets函数读取用户输入的命令 - 使用strtok函数解析出命令参数和要执行的程序 - 将命令参数和要执行的程序存储到相应的变量 2. 程序加载 程序加载是指将用户输入的命令对应的可执行程序加载到内存,并执行该程序。这可以通过使用Linux系统调用的exec函数来实现。 具体步骤如下: - 使用fork函数创建一个子进程 - 在子进程使用exec函数加载用户输入的命令对应的可执行程序 3. 输出重定向 输出重定向是指将程序输出的结果重定向到指定的文件或设备,而不是输出到屏幕上。这可以通过使用Linux系统调用的dup2函数来实现。 具体步骤如下: - 判断用户是否输入了输出重定向符号“>” - 如果用户输入了输出重定向符号“>”,则使用open函数打开用户指定的输出文件,并使用dup2函数将输出重定向到该文件 综上所述,我们可以设计一个简单的模拟shell程序,实现命令解析、程序加载和输出重定向的功能。下面是一个简单的示例代码,仅供参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/wait.h> #define MAX_COMMAND_LENGTH 1024 #define MAX_ARGS 64 int main() { char command[MAX_COMMAND_LENGTH]; char *args[MAX_ARGS]; char *token; int i, fd, pid, status; while (1) { // 读取用户输入的命令 printf("> "); fgets(command, MAX_COMMAND_LENGTH, stdin); // 解析命令参数和要执行的程序 i = 0; token = strtok(command, " \n"); while (token != NULL) { args[i++] = token; token = strtok(NULL, " \n"); } args[i] = NULL; // 判断用户是否输入了输出重定向符号 for (i = 0; args[i] != NULL; i++) { if (strcmp(args[i], ">") == 0) { // 打开用户指定的输出文件,并将输出重定向到该文件 fd = open(args[i+1], O_WRONLY | O_CREAT | O_TRUNC, 0644); dup2(fd, STDOUT_FILENO); close(fd); args[i] = NULL; break; } } // 执行用户输入的命令 pid = fork(); if (pid == 0) { execvp(args[0], args); printf("command not found\n"); exit(1); } else { waitpid(pid, &status, 0); } } return 0; } ``` 请注意,这只是一个简单的示例代码,仅供参考。在实际使用,您需要对代码进行更加完善的测试和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值