① c语言中argc和argv是什么意思
argc是参数个数,定义为int
argv是字符串数组,存的是参数,定义为char**或者char*
argv[]
比如你编译好的程序为my.exe
在命令行执行
my.exe
1
2
3
那argc就是4,argv[0]是"my.exe",argv[1]是"1",argv[2]是"2",argv[3]是"3";
② linux下,在调用main函数之前怎样得到命令行参数argc和argv
#include <mutex>
#include <thread>
class main_args;
namespace details
{
template<typename MainArgs>
class main_args_access : MainArgs
{
public:
static void get_main_args_func(int c, char* v[], char* p[])
{
std::call_once(MainArgs::get_flag, [&](){
MainArgs::argc = c;
MainArgs::argv = v;
MainArgs::envp = p;
});
}
};
}
class main_args
{
private:
friend class details::main_args_access<main_args>;
static std::once_flag get_flag;
public:
static int argc;
static char** argv;
static char** envp;
};
int main_args::argc;
char** main_args::argv = nullptr;
char** main_args::envp = nullptr;
namespace details
{
// gcc
#if defined(__GNUC__) && (__linux__)
__attribute__((section(".init_array"))) void (*get_main_args_func_ptr)(int, char*[], char*[]) = &(main_args_access<main_args>::get_main_args_func);
#endif
}
必需支持C++11以上的编译器
③ linux编程中,getopt(argc, argv, "d:s:t:7xoch") 语句解释 谢谢
d:这个参数后必须跟一个字串,如:-d xxx,如果没有XXX这个字串,getopt将返回‘?’,这个和没有相关参数返回值是一样的,所以建议在这个getopt参数字串前加上‘:’,如:“:d:s:t:7xoch”,这样当没有跟XXX字串时,将返回':',同理s:t:是一样,xoch参数后不要跟XXX字串,如果跟上,在执行getopt之后,所以未解析的参数会被集中在一起,这时可以用全局变量argv[optind]除开始获取:
for(;optind<argc;optind++){
strcpy(v,argv[optind]);
}
关于数字,抱歉我还没用过,我猜大概是限制所跟字串的长度的。
④ 在linux下用gcc编译C语言程序,其中main函数是带参的(argc argv,txt的文件),请问如何设置将该文件读进
main参数中argv数组中的第二个(即argv[1])为该可执行程序的第一个参数
也是托到该可执行程序上的文件的路径
有了路径,在程序中读取该路径文件内容并显示
void main(int argc,char *argv[])
{
/*读取并显示argv[1]文件的内容,学过C语言的文件读写吧*/
}
⑤ linux上怎么隐藏命令行参数
关于在 UNIX/Linux 系统下面,任何人都无法隐藏命令行参数。因为它们的命令、以及相关的各种参数都是标准的,任何一个如果想学习 UNIX/Linux 系统的人,都能够找到相关的命令使用文档(例如:显示文件名及其子目录名的命令:ls ,它就有各种参数,只要想学习该命令的使用,那么谁也无法隐藏命令行参数)。
除非该人是一个精通UNIX/Linux 操作系统内核底层编程的人员,那么他当然可以实现隐藏命令行参数的目的。例如:他可以通过修改 Linux 系统有关 ls 命令使用的这部分内核源代码,达到让任何用户使用 man ls 时,不显示出来 ls 命令到底都有哪些参数可以使用。
⑥ linux进程通信 中的exec问题
哪里写的这些...好乱阿..
先解释下基本的:
int main(argc,char * argv[])
main的参数,就是命令行参数.
比如你的可执行文件是test,你希望在程序执行时传入IP地址,那么可以这样:
./test 127.0.0.1
此时,argc =1,argv[1]是就是指向"127.0.0.1"指针(命令参数全部当作字符串来处理的)。
而 argv[0]就代表第一个参数,这里对应的就是"./test"。
argc和argv在mian里面都是可以使用的,出了main的范围就不能使用了。
再来说你提出的第一个地方,exec的问题。
exec实际上包含了一组函数,execl, execlp, execle, execv, execvp, execvpe
具体使用方法,你man execv就可以得到这些函数的使用方法。
exec函数的作用是,产生一个新进程,结束当前进程(具体执行的操作是复制当前进程的一部分数据和权限,然后根据参数启动一个新的进程)。
exec这组函数执行时候,需要提供的参数包括:一个可执行程序的路径,传递给可执行程序的参数。(这里的参数,与刚才说到的main的参数含义相同。)
说到这里应该明白了吧...就一个。
我不知道你要hello world干什么...照你意思给写了个.
第一个,就是你贴出来的代码改动一点点(我这边运行有点问题):
#include <stdio.h>
main(int argc,char* argv[])
{
int i=0
while(i<=argc)
{
printf("arguement %d : %s ",i,argv[i]);
printf("\n");
i++;
}
}
运行程序:
$gcc test.c -o test
$./test hello world
输出结果:
[ksl@myhost WGX]$ ./test hello world
Arguement 0:./test
Arguement 1:hello
Arguement 2:world
Arguement 3:(null)
然后第二个,使用exec的例子,我用execl吧..
文件名是test1.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void main(int argc,char *argv[])
{
printf("This is not exec...");
execl("./test","hello","world",NULL);
//如果exec执行正常,下面的printf将不会被执行
//因为当前进程已经结束,./test将被执行
printf("exec error");
}
输出结果:
[ksl@myhost WGX]$ ./test1
Arguement 0:hello
Arguement 1:world
Arguement 2:(null)
后者并没输出"./test"....就是exec启动的程序,其命令行参数中只有参数.(我也不晓得原因...=.=||)
⑦ linux 命令参数提示
很少看有人去补全参数。
我有见过同事用zsh替代bash的,那个好像可以补全参数,但不是所有软件,至少常用软件没问题。
⑧ linux下udp通信的客户端、服务器端的c语言程序 用int argc,char *argv[] 能够输入ip和端口号
占个位置,晚上回去给你发,我做的是C语言的socket通信的小程序,我是先创建了一个守护进程,我的守护进程,做的任务就是你所说的中转程序的工作,通信的客户端,先把消息发给守护进程,再由守护进程转发给另一个客户端。
守护进程:
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。
由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。
⑨ linux C语言 怎么样由终端执行时键入赋值程序中的某变量、 就是这样 ./a.out 1 或者 ./a.out + 字符串
#include<stdlib.h>
intmain(intargc,char*argv[]);
{
}
这里 argc 就是命令行参数个数,argv[] 中存放命令行参数,当然都是字符串,需要自己去转换。
⑩ 十万火急 在linux 下怎么操作int main(int argc,char *argv[])
linux下是不看文件后缀名的,并且这里的可执行文件也不是.exe
你用gcc -Wall -o cf cf.c这里cf就是生成的可执行文件名了
运行时输入:./cf 1.txt 要保证有这个1.txt文件,因为你第一个是以r的方式打开
argc 就是你命令行输入参数的个数,这里就是2个,一个是./cf 一个是1.txt
argv[0]就是./cf,argv[1]就是1.txt以此类推