⑴ c語言如何設置環境變數(dos下)
system()函數
如system("path"),在C中列印環境變數。
path
命令見path
/?
具體使用方法見下:
<stdlib.h>
int
system(const
char
*s)
system函數將字元串s傳遞給系統環境運行。如果s是NULL,如果存在命令處理器system返回非0。如果s非NULL,system返回的值與執行的環境相關。
參考資料:the
C
programming
language
⑵ C語言環境中如何導入數據
(1)可以通過文件讀寫導入數據。例如: fp=fopen("文件名","r"); 打開文件,便可讀入。
(2)可以通過鍵盤輸入。例如 scanf(), gets() 之類。例如: 命令行文件轉向。
(3)命令行 位置參數輸入。 例如: int main(int argc, char *argv[])
argc 得到 位置參數總個數,argv[0] 是程序名,argv[1], argv[2],argv[3]...參數
(4) 通過內部函數,獲取環境變數值。
例如: char *pathvar;
pathvar = getenv("PATH"); 得 路徑
(5) 高級方法,例如 各種儀器,儀表,設備 等的 輸出信號,通過 A/D 轉換變數據,C語言(或加匯編) 讀入數據。
⑶ C++如何獲取系統環境變數
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *pathvar;
pathvar = getenv("PATH");
printf("pathvar=%s",pathvar);
return 0;
}
⑷ linux下c語言環境變數操作的幾個相關函數
這幾個函數的原型在<stdio.h>中定義
/* Return the value of envariable NAME, or NULL if it doesn't exist. */
extern char *getenv (__const char *__name) __THROW __nonnull ((1)) __wur;
/* The SVID says this is in <stdio.h>, but this seems a better place. */
/* Put STRING, which is of the form "NAME=VALUE", in the environment.
If there is no `=', remove NAME from the environment. */
extern int putenv (char *__string) __THROW __nonnull ((1));
/* Set NAME to VALUE in the environment.
If REPLACE is nonzero, overwrite an existing value. */
extern int setenv (__const char *__name, __const char *__value, int __replace)
__THROW __nonnull ((2));
/* Remove the variable NAME from the environment. */
extern int unsetenv (__const char *__name) __THROW __nonnull ((1));
⑸ capl語言里怎麼讓獲取環境變數的值增加
獲取的環境變數賦給定義的變數,再讓定義的變數++,或直接+,和c語言規則差不多
⑹ 如何用C語言獲取目錄下的文件和目錄列表
#include <stdio.h>
#include <stdlib.h>
void main()
{
system("DIR /D C:\\ /s /B > a.log");
}
C:\下的所有文件夾,子文件夾里所有文件,轉向到 文本文件 a.log 里。
格式:
C:\aaa\bbb\ccc\...
只要文件夾命令:
dir /d c: /B /ad
只要文件夾命令,含子文件夾:
dir /d c: /B /ad /s
⑺ c語言怎麼獲得linux的home目錄
可以利用getenv函數來實現。
在Linux系統中,home目錄的定義是通過系統環境變數中的HOME變數值來確定的,在shell下可以通過
echo
$HOME來查看。
而在C語言中,庫函數getenv可以用作獲取環境變數值。該函數位於stdlib.h,
原型為
char
*getenv(char
*name);
功能為獲取名字為name的環境變數字元串。
所以,下面代碼就可以獲取到home目錄名了:
char *home;
home = getenv("HOME");
printf("the home path is %s\n", home);
⑻ c語言中return()起什麼作用
關於C語言中return的一些總結
return是C++預定義的語句,它提供了種植函數執行的一種放大。當return語句提供了一個值時,這個值就成為函數的返回值.
說到return,有必要提及主函數的定義,下面是從網路上找到的資料,好好消化吧,對了解主函數中返回值的理解有很大的幫助.
很多人甚至市面上的一些書籍,都使用了voidmain(),其實這是錯誤的。C/C++中從來沒有定義過voidmain()。C++之父BjarneStroustrup在他的主頁上的FAQ中明確地寫著Thedefinitionvoidmain(){/*...*/}isnotandneverhasbeenC++,norhasitevenbeenC.(voidmain()從來就不存在於C++或者C)。下面我分別說一下C和C++標准中對main函數的定義。
1.C
在C89中,main()是可以接受的。BrianW.Kernighan和DennisM.Ritchie的經典巨著TheCprogrammingLanguage2e(《C程序設計語言第二版》)用的就是main()。不過在最新的C99標准中,只有以下兩種定義方式是正確的:
intmain(void)
intmain(intargc,char*argv[])
(參考資料:ISO/IEC9899:1999(E)Programminglanguages—C5.1.2.2.1Programstartup)
當然,我們也可以做一點小小的改動。例如:char*argv[]可以寫成char**argv;argv和argc可以改成別的變數名(如intval和charval),不過一定要符合變數的命名規則。
如果不需要從命令行中獲取參數,請用intmain(void);否則請用intmain(intargc,char*argv[])。
main函數的返回值類型必須是int,這樣返回值才能傳遞給程序的激活者(如操作系統)。
如果main函數的最後沒有寫return語句的話,C99規定編譯器要自動在生成的目標文件中(如exe文件)加入return0;,表示程序正常退出。不過,我還是建議你最好在main函數的最後加上return語句,雖然沒有這個必要,但這是一個好的習慣。注意,vc6不會在目標文件中加入return0;,大概是因為vc6是98年的產品,所以才不支持這個特性。現在明白我為什麼建議你最好加上return語句了吧!不過,gcc3.2(Linux下的C編譯器)會在生成的目標文件中加入return0;。
2.C++
C++98中定義了如下兩種main函數的定義方式:
intmain()
intmain(intargc,char*argv[])
(參考資料:ISO/IEC14882(1998-9-01)Programminglanguages—C++3.6Startandtermination)
intmain()等同於C99中的intmain(void);intmain(intargc,char*argv[])的用法也和C99中定義的一樣。同樣,main函數的返回值類型也必須是int。如果main函數的末尾沒寫return語句,C++98規定編譯器要自動在生成的目標文件中加入return0;。同樣,vc6也不支持這個特性,但是g++3.2(Linux下的C++編譯器)支持。
3.關於voidmain
在C和C++中,不接收任何參數也不返回任何信息的函數原型為「voidfoo(void);」。可能正是因為這個,所以很多人都誤認為如果不需要程序返回值時可以把main函數定義成voidmain(void)。然而這是錯誤的!main函數的返回值應該定義為int類型,C和C++標准中都是這樣規定的。雖然在一些編譯器中,voidmain可以通過編譯(如vc6),但並非所有編譯器都支持voidmain,因為標准中從來沒有定義過voidmain。g++3.2中如果main函數的返回值不是int類型,就根本通不過編譯。而gcc3.2則會發出警告。所以,如果你想你的程序擁有很好的可移植性,請一定要用intmain。
4.返回值的作用
main函數的返回值用於說明程序的退出狀態。如果返回0,則代表程序正常退出,否則代表程序異常退出。下面我們在winxp環境下做一個小實驗。首先編譯下面的程序:
intmain(void)
{
return0;
}
然後打開附件里的「命令提示符」,在命令行里運行剛才編譯好的可執行文件,然後輸入「echo%ERRORLEVEL%」,回車,就可以看到程序的返回值為0。假設剛才編譯好的文件是a.exe,如果輸入「a&&dir」,則會列出當前目錄下的文件夾和文件。但是如果改成「return-1」,或者別的非0值,重新編譯後輸入「a&&dir」,則dir不會執行。因為&&的含義是:如果&&前面的程序正常退出,則繼續執行&&後面的程序,否則不執行。也就是說,利用程序的返回值,我們可以控制要不要執行下一個程序。這就是intmain的好處。如果你有興趣,也可以把main函數的返回值類型改成非int類型(如float),重新編譯後執行「a&&dir」,看看會出現什麼情況,想想為什麼會出現那樣的情況。順便提一下,如果輸入a||dir的話,則表示如果a異常退出,則執行dir。
5.那麼intmain(intargc,char*argv[],char*envp[])呢?
這當然也不是標准C裡面定義的東西!char*envp[]是某些編譯器提供的擴展功能,用於獲取系統的環境變數。因為不是標准,所以並非所有編譯器都支持,故而移植性差,不推薦使用。
到了這里,你應該了解為什麼主函數定義為int返回類型,而且函數體裡面有return0;這個語句了吧.
下面具體說說我對return的應用的理解。
只要一個函數的返回值是數字型的,那麼就可以返回0(即return0),其實你返回多少都沒問題。一般情況下,C++做出來的函數都要求返回一個值,當函數執行正常,且達到了一般情況下的目的,那麼就返回0表示正確的調用了該函數,這個0就是返回給主調函數以通知沒有出錯的;如果函數調用中出錯,或者沒有按照一般情況執行,那麼就返回1,以告知主調函數採取響應策略;如果你在某個函數所在類的定義所在的頭文件中定義了一組狀態值(一般都是負整數),那麼函數就可以返回不同的值以告之主調函數具體發生了什麼異常或錯誤,這種情況一般用於函數功能獨立性較差的的情況。所以一般不鼓勵把函數返回類型定義為void,至少返回應該是int,而在函數的最後加上return0.語句:
intfunc(參數列表)
{
……
……
……
Return0;
}
在函數中,如果碰到return語句,那麼程序就會返回調用該函數的下一條語句執行,也就是說跳出函數的執行,回到原來的地方繼續執行下去。但是如果是在主函數中碰到return語句,那麼整個程序就會停止,退出程序的執行。
如果你定義一個函數有返回類型,可以想下面那樣調用:
intfunc()
{
intvalue;
……
……
……
returnvalue;
}
intmain()
{
intintvalue;
intvalue=func();
……
……
teturn0;
}
return語句後面具體是什麼內容,這就要具體情況具體分析了:
(1)在返回類型是char的函數中,return後應該是char類型的值;
(2)在返回類型是int的函數中,如果是要停止函數的調用,最好應該為0;其他的按照你的目的而定,只要是int類型就行了
(3)在返回類型是結構類型的函數中,return後應該是結構的一個實例對象。
總之,函數定義為什麼樣的返回類型,該函數中return後就應該是相應類型的值。
⑼ C語言環境變數問題
execve(執行文件)
在父進程中fork一個子進程,在子進程中調用exec函數啟動新的程序。exec函數一共有六個,其中execve為內核級系統調用,其他(execl,execle,execlp,execv,execvp)都是調用execve的庫函數。
表頭文件
#include<unistd.h>
定義函數
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
函數說明
execve()用來執行參數filename字元串所代表的文件路徑,第二個參數是利用數組指針來傳遞給執行文件,並且需要以空指針(NULL)結束,最後一個參數則為傳遞給執行文件的新環境變數數組。
返回值
如果執行成功則函數不會返回,執行失敗則直接返回-1,失敗原因存於errno 中。
錯誤代碼 EACCES
1. 欲執行的文件不具有用戶可執行的許可權。
2. 欲執行的文件所屬的文件系統是以noexec 方式掛上。
3.欲執行的文件或script翻譯器非一般文件。
EPERM
1.進程處於被追蹤模式,執行者並不具有root許可權,欲執行的文件具有SUID 或SGID 位。
2.欲執行的文件所屬的文件系統是以nosuid方式掛上,欲執行的文件具有SUID 或SGID 位元,但執行者並不具有root許可權。
E2BIG 參數數組過大
ENOEXEC 無法判斷欲執行文件的執行文件格式,有可能是格式錯誤或無法在此平台執行。
EFAULT 參數filename所指的字元串地址超出可存取空間范圍。
ENAMETOOLONG 參數filename所指的字元串太長。
ENOENT 參數filename字元串所指定的文件不存在。
ENOMEM 核心內存不足
ENOTDIR 參數filename字元串所包含的目錄路徑並非有效目錄
EACCES 參數filename字元串所包含的目錄路徑無法存取,許可權不足
ELOOP 過多的符號連接
ETXTBUSY 欲執行的文件已被其他進程打開而且正把數據寫入該文件中
EIO I/O 存取錯誤
ENFILE 已達到系統所允許的打開文件總數。
EMFILE 已達到系統所允許單一進程所能打開的文件總數。
EINVAL 欲執行文件的ELF執行格式不只一個PT_INTERP節區
EISDIR ELF翻譯器為一目錄
ELIBBAD ELF翻譯器有問題。
範例
#include<unistd.h>
main()
{
char * argv[ ]={「ls」,」-al」,」/etc/passwd」,(char *)0};
char * envp[ ]={「PATH=/bin」,0}
execve(「/bin/ls」,argv,envp);
}
執行
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
⑽ 請問 c語言代碼中如何使用環境變數指明路徑訪問文件
不能直接用,要先將環境變數替換為真實的值,參考
ExpandEnvironmentStrings