文章目录
- 一、main函数
- 二、IO(输入/输出)
- 2.1 标准IO和文件IO
- 2.2 文件描述符
- 2.2 open函数
一、main函数
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
// argc:表示是命令行中参数的个数
// argv:表示的是命令行中的参数
int i;
printf("argc is %d\n", argc);
for(i = 0; i < argc; i++)
{
printf("argv[%d] is %s\n", i, argv[i]);
}
return 0;
}
虚拟机上编译运行:
$ gcc main.c -o main.out
$ ./main.out
argc is 1
argv[0] is ./main.out
$ ./main.out 1 2 3 4 5 6 7 8 9
argc is 10
argv[0] is ./main.out
argv[1] is 1
argv[2] is 2
argv[3] is 3
argv[4] is 4
argv[5] is 5
argv[6] is 6
argv[7] is 7
argv[8] is 8
argv[9] is 9
虚拟机上编译,开发板上运行:
$ aarch64-linux-gnu-gcc main.c -o main.armelf
[root@RK356X:/opt]# ./main.armelf 1 2 3 4 5 6 7 8 9
argc is 10
argv[0] is ./main.armelf
argv[1] is 1
argv[2] is 2
argv[3] is 3
argv[4] is 4
argv[5] is 5
argv[6] is 6
argv[7] is 7
argv[8] is 8
argv[9] is 9
二、IO(输入/输出)
2.1 标准IO和文件IO
- 什么是文件IO?(Linux系统编程的重点)
文件IO就是直接调用内核提供的系统调用函数。 - 什么是标准IO?
标准IO就是间接调用系统调用函数,是C库函数。
文件IO和标准IO的区别?
文件IO是直接调用内核提供的系统调用函数,头文件是unistd.h。
标准IO是简介调用系统调用函数,头文件是stdio.h。
文件IO是依赖于Linux操作系统的,标准IO是不依赖操作系统的,所以在任何操作系统下,使用标准IO,也就是C库函数操作文件的方法都是相同的。
2.2 文件描述符
对于文件IO来说,一切都是围绕着文件描述符来进行的。在Linux系统中,所有打开的文件都有一个对应的文件描述符。
文件描述符的本质是一个非负整数,当我们打开一个文件时,系统会给我们分配一个文件描述符。
当我们对一个文件做读写操作的时候,我们使用open函数返回的这个文件描述符会标识该文件,并将其作为参数传递给read或者write函数。
在posix.1应用程序里面,文件描述符0,1,2分别对应着标准输入,标准输出,标准出错。
2.2 open函数
使用man命令查看:
$ man 2 open
OPEN(2) Linux Programmer's Manual OPEN(2)
NAME
open, openat, creat - open and possibly create a file
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
int openat(int dirfd, const char *pathname, int flags);
int openat(int dirfd, const char *pathname, int flags, mode_t mode);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
openat():
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L